diff --git a/.coveragerc b/.coveragerc index 895e291..3138593 100644 --- a/.coveragerc +++ b/.coveragerc @@ -2,4 +2,4 @@ omit = */site-packages/* */python?.?/* - ckan/* + ckan/* \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..137d0b1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +node_modules +build +dist +*.egg-info/ diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml deleted file mode 100755 index dbfc249..0000000 --- a/.github/workflows/flake8.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Prueba de flake8 -run-name: ${{ github.actor }} probando schemingdcat-test -on: [push, pull_request] - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Install requirements - run: pip install flake8 pycodestyle - - name: Check syntax - # Stop the build if there are Python syntax errors or undefined names - run: flake8 --count --statistics --show-source --max-line-length=127 --exit-zero - - - name: Warnings - run: flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --extend-exclude="" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eaf7400..b5753e6 100755 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,14 +1,15 @@ -name: schemingdcat-test -run-name: ${{ github.actor }} probando schemingdcat-test -on: [workflow_dispatch] +name: Tests +env: + COLUMNS: 120 +on: [pull_request] jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.9' - name: Install requirements run: pip install flake8 pycodestyle - name: Check syntax @@ -18,15 +19,23 @@ jobs: needs: lint strategy: matrix: - ckan-version: ["2.10", 2.9] + include: + - ckan-version: "2.11" + ckan-image: "ckan/ckan-dev:2.11-py3.10" + - ckan-version: "2.10" + ckan-image: "ckan/ckan-dev:2.10-py3.10" + - ckan-version: "2.9" + ckan-image: "ckan/ckan-dev:2.9-py3.9" fail-fast: false + name: CKAN ${{ matrix.ckan-version }} runs-on: ubuntu-latest container: - image: openknowledge/ckan-dev:${{ matrix.ckan-version }} + image: ${{ matrix.ckan-image }} services: solr: - image: ckan/ckan-solr:${{ matrix.ckan-version }} + # Custom image with spatial support and advanced schema + image: ghcr.io/mjanez/ckan-solr:2.10-solr9-spatial postgres: image: ckan/ckan-postgres-dev:${{ matrix.ckan-version }} env: @@ -35,7 +44,7 @@ jobs: POSTGRES_DB: postgres options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 redis: - image: redis:3 + image: redis:7-alpine env: CKAN_SQLALCHEMY_URL: postgresql://ckan_default:pass@postgres/ckan_test CKAN_DATASTORE_WRITE_URL: postgresql://datastore_write:pass@postgres/datastore_test @@ -44,25 +53,41 @@ jobs: CKAN_REDIS_URL: redis://redis:6379/1 steps: - - uses: actions/checkout@v3 - - uses: actions/checkout@v3 - with: - repository: mjanez/ckanext-scheming - - name: Install requirements + - uses: actions/checkout@v4 + - name: Install requirements (common) run: | - pwd - echo $GITHUB_WORKSPACE - ls -al $GITHUB_WORKSPACE - pip install --upgrade pip + pip install -r requirements.txt + pip install -r dev-requirements.txt pip install -e . # Replace default path to CKAN core config file with the one on the container sed -i -e 's/use = config:.*/use = config:\/srv\/app\/src\/ckan\/test-core.ini/' test.ini - sed -i -e 's/use = config:.*/use = config:\/srv\/app\/src\/ckan\/test-core.ini/' test_subclass.ini + - name: Install requirements (2.9) + run: | + pip install -U pytest-rerunfailures + if: ${{ matrix.ckan-version == '2.9' }} + - name: Setup other extensions + run: | + # Install ckanext-dcat + git clone https://github.com/mjanez/ckanext-dcat + pip install -e ckanext-dcat + pip install -r ckanext-dcat/requirements.txt + + # Install ckanext-harvest + git clone https://github.com/ckan/ckanext-harvest + pip install -e ckanext-harvest + pip install -r ckanext-harvest/requirements.txt + + # Install ckanext-scheming + git clone https://github.com/ckan/ckanext-scheming + pip install -e ckanext-scheming + + # Install ckanext-fluent + git clone https://github.com/mjanez/ckanext-fluent + pip install -e ckanext-fluent + - name: Setup extension run: | - pip install -r test-requirements.txt ckan -c test.ini db init - - name: Run all tests - run: pytest --ckan-ini=test.ini --cov=ckanext.scheming ckanext/scheming/tests - - name: Run plugin subclassing tests - run: pytest --ckan-ini=test_subclass.ini ckanext/scheming/tests/test_dataset_display.py ckanext/scheming/tests/test_form.py::TestDatasetFormNew ckanext/scheming/tests/test_dataset_logic.py \ No newline at end of file + ckan -c test.ini db pending-migrations --apply + - name: Run tests + run: pytest --log-cli-level=INFO --ckan-ini=test.ini --cov=ckanext.schemingdcat --cov-report=term-missing --cov-append --disable-warnings ckanext/schemingdcat/tests diff --git a/.gitignore b/.gitignore index 7b18771..34f7fc8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,16 @@ .ropeproject node_modules +**/node_modules/ bower_components .vscode +.idea +*.log # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] +*.pyc +.pytest_cache # C extensions *.so @@ -52,3 +57,9 @@ docs/_build/ ckanext/schemingdcat/i18n/tools/output/* ckanext/schemingdcat/i18n/tools/input/* ckanext/schemingdcat/i18n/tools/input/input.yaml + +# custom harvesters +doc/harvesters/*_config.json +!doc/harvesters/ckan_template_config.json +!doc/harvesters/xls_template_config.json +!doc/harvesters/csw_template_config.json \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 75fdb40..7c9db8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,54 @@ # Changelog -## [Unreleased](https://github.com/ckan/ckanext-dcat/compare/v3.2.1...HEAD) +## [Unreleased](https://github.com/ckan/ckanext-dcat/compare/v4.0.0...HEAD) + +## [v4.0.0](https://github.com/mjanez/ckanext-schemingdcat/compare/v4.0.0...v3.2.2) - 2024-09-18 +* Fix search and index to ensure proper functionality by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/c294495 +* Improve profiles and add DCAT-AP/GeoDCAT-AP 3 by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/7fb647a +* Bug - CKAN 2.10 - Fix request.args() #41 by @mjanez +* Develop feature/form-tabs #87 by @mjanez +* DCAT - Custom DCAT-AP/GeoDCAT-AP (ES/EU) profiles in schemingdcat #93 by @mjanez +* Schema - Transform contact, publisher, author and maintainer to list of dicts (repeating subfields) #95 by @mjanez +* Enhanced DCAT-AP profiles to ensure MQA DCAT-AP compliance #99 by @mjanez +* Feature - Fix tests #22 by @mjanez +* Improve schemas to align names with ckanext-dcat by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/0d6559b +* Improve profiles and add DCAT-AP 3 by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/8cb65ff +* Improve general UI, Home by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/4810b07 +* Update package/resource forms to Tabs by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/ef76bb3 +* Improve i18n and icons by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/4dca2e4 +* Fix and improve templates for CKAN 2.10 by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/c7aabef +* Fix fa icons for license/social templates by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/f358203 +* Fix before_update by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/7c303d9 +* Improve package_item.html template by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/fdf55e8 +* Improve base admin config template by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/a344aec +* Update configuration and add stats init to plugin by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/006078e +* Refactor code to remove debug logging statements by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/3da105a +* Refactor download metadata template and improve metadata profiles by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/6954453 +* Improve metadata_info and profile badges by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/0ffa59e +* Refactor new_source_form.html to use Bootstrap 5 data attributes by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/c4d131b +* Add docs and templates for harvesters by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/e136909 +* Add xls_template_config by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/69e04f3 +* Improve style to improve header language selector dropdown menu by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/66dc66d +* New DCAT-AP/GeoDCAT-AP Schemas and DCAT Profiles & Form tabs for datasets/resources #97 by @mjanez +* Fix tabs slug-preview and dataset-map by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/1af58e1 +* Fix Solr indexing by converting dict fields to JSON strings by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/fb8abf6 +* Update open data stats: Skip statistics update during DB initialization by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/e3bb1ee +* Improve form tabs by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/0cbb625 +* Fix package snippets by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/448113e +* Fix organization create/edit button bugs by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/4b10208 +* Fix spatial_query snippet bugs by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/3026467 +* Fix xloader logs styles for 2.10 by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/2c02458 +* Fix tags containers by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/commit/50945d0 +* Improve datastore/data api and downloads templates by @mjanez + +## [v3.2.2](https://github.com/mjanez/ckanext-schemingdcat/compare/v3.2.2...v3.2.1) - 2024-08-28 +* Feature/ckan harvester improve by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/pull/86 +* Update v3.2.2 by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/pull/85 +* Fix bug when schemingdcat.endpoints_yaml is None by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/pull/89 +* Feature/ckan harvester improve by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/pull/90 +* Fix harvester by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/pull/91 +* Add allow_private_datasets to ckan harvester by @mjanez in https://github.com/mjanez/ckanext-schemingdcat/pull/98 +* Fixed bugs with localised_filesize snippet 43cc8b025e6e7574dad952b1a6b680a4a66dbcff ## [v3.2.0](https://github.com/mjanez/ckanext-schemingdcat/compare/v3.2.1...v3.2.0) - 2024-05-17 * Enhance harvester, field mapping validation lib and harvest templates #81 diff --git a/README.md b/README.md index cb403cc..c62670d 100644 --- a/README.md +++ b/README.md @@ -7,50 +7,66 @@ ConfigurationSchemasHarvesters • - Running the Tests + DCAT Profiles • + Running the Tests • + Development

## Overview -This CKAN extension provides functions and templates specifically designed to extend `ckanext-scheming` and includes DCAT and Harvest enhancements to adapt CKAN Schema to [GeoDCAT-AP](./ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml). +This CKAN extension provides functions and templates specifically designed to extend `ckanext-scheming` and `ckanext-dcat` and includes RDF profiles and Harvest enhancements to adapt CKAN Schema to multiple metadata profiles as: [GeoDCAT-AP](./ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_full.yaml) or [DCAT-AP](./ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_full.yaml). > [!WARNING] -> Requires [mjanez/ckanext-dcat](https://github.com/mjanez/ckanext-dcat), [ckan/ckanext-scheming](https://github.com/ckan/ckanext-scheming) and [ckan/ckanext-spatial](https://github.com/ckan/ckanext-spatial) to work properly. - +> Requires [mjanez/ckanext-dcat](https://github.com/mjanez/ckanext-dcat) (newer releases) or [ckan/ckanext-dcat](https://github.com/ckan/ckanext-dcat) (stables), [ckan/ckanext-scheming](https://github.com/ckan/ckanext-scheming) and [ckan/ckanext-spatial](https://github.com/ckan/ckanext-spatial) to work properly. Also, if you want to use custom schemas with multilingualism, it is necessary to use ckanext-fluent. There is a version with corrections: [mjanez/ckanext-fluent](https://github.com/mjanez/ckanext-fluent) > [!TIP] > It is **recommended to use with:** [`ckan-docker`](https://github.com/mjanez/ckan-docker) deployment or only use [`ckan-pycsw`](https://github.com/mjanez/ckan-pycsw) to deploy a CSW Catalog. ![image](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/6b3d6fd4-7119-4307-8be7-5e17d41292fe) Enhancements: -- Could use schemas for `ckanext-scheming` in the plugin like [CKAN GeoDCAT-AP custom schemas](ckanext/schemingdcat/schemas#readme) +- Custom schemas for `ckanext-scheming` in the plugin like [CKAN GeoDCAT-AP custom schemas](ckanext/schemingdcat/schemas#readme) +- [`ckanext-dcat` profiles](#dcat-profiles) for RDF serialization according to profiles such as DCAT, DCAT-AP, GeoDCAT-AP and in the Spanish context, NTI-RISP. +- Improve metadata management forms to include tabs that make it easier to search metadata categories and simplify metadata editing. - Improve the search functionality in CKAN for custom schemas. It uses the fields defined in a scheming file to provide a set of tools to use these fields for scheming, and a way to include icons in their labels when displaying them. More info: [`ckanext-schemingdcat`](https://github.com/mjanez/ckanext-schemingdcat) - Add improved harvesters for custom metadata schemas integrated with `ckanext-harvest` in CKAN using [`mjanez/ckan-ogc`](https://github.com/mjanez/ckan-ogc). - Add Metadata downloads for Linked Open Data formats ([`mjanez/ckanext-dcat`](https://github.com/mjanez/ckanext-dcat)) and Geospatial Metadata (ISO 19139, Dublin Core, etc. with [`mjanez/ckan-pycsw`](https://github.com/mjanez/ckanext-pycsw)) - Add custom i18n translations to `datasets`, `groups`, `organizations` in schemas, e.g: [GeoDCAT-AP (ES)](#geodcat-ap-es).[^1] - Add a set of useful helpers and templates to be used with Metadata Schemas. -- [Update the base theme](#new-theme) of CKAN to use with the enhancements of this extension. +- [Update the base theme](#new-theme) of CKAN to use with the enhancements of this extension, now using Tabs instead of older `stages`. - Modern UI inspired on [`datopian/ckanext-datopian`](https://github.com/datopian/ckanext-datopian). - LOD/OGC Endpoints based on avalaible profiles (DCAT) and CSW capabilities with [`mjanez/ckan-pycsw`](https://github.com/mjanez/ckanext-pycsw). ## Requirements -This plugin is compatible with CKAN 2.9 or later and needs the following plugins to work properly: +### Compatibility +Compatibility with core CKAN versions: + +| CKAN version | Compatible? | +|--------------|-----------------------------------------------------------------------------| +| 2.8 | ❌ No (>= Python 3) | +| 2.9 | ✅ Yes (<= [`v3.2.2`](https://github.com/mjanez/ckanext-schemingdcat/releases/tag/v3.2.2)) | +| 2.10 | ✅ Yes (>= [`v4.0.0`](https://github.com/mjanez/ckanext-schemingdcat/releases/tag/v4.0.0)) | + +### Plugins +This plugin needs the following plugins to work properly: ```sh # Install latest stable release of: ## ckan/ckanext-scheming: https://github.com/ckan/ckanext-scheming/tags (e.g. release-3.0.0) pip install -e git+https://github.com/ckan/ckanext-scheming.git@release-3.0.0#egg=ckanext-scheming - ## mjanez/ckanext-dcat: https://github.com/mjanez/ckanext-dcat/tags (e.g. 1.2.0-geodcatap) - pip install -e git+https://github.com/mjanez/ckanext-dcat.git@1.2.0-geodcatap#egg=ckanext-dcat + ## mjanez/ckanext-dcat: https://github.com/mjanez/ckanext-dcat/tags (e.g. 1.8.0) + pip install -e git+https://github.com/mjanez/ckanext-dcat.git@1.8.0#egg=ckanext-dcat pip install -r https://raw.githubusercontent.com/mjanez/ckanext-dcat/master/requirements.txt - ## ckan/ckckanext-spatial: https://github.com/ckan/ckanext-spatial/tags (e.g. v2.1.1) + ## ckan/ckanext-spatial: https://github.com/ckan/ckanext-spatial/tags (e.g. v2.1.1) pip install -e git++https://github.com/ckan/ckanext-spatial.git@v2.1.1/#egg=ckanext-spatial#egg=ckanext-spatial pip install -r https://raw.githubusercontent.com/ckan/ckanext-spatial/v2.1.1/requirements.txt - ## ckan/ckckanext-harvest: https://github.com/ckan/ckanext-harvest/tags (e.g. v1.5.6) + ## ckan/ckanext-harvest: https://github.com/ckan/ckanext-harvest/tags (e.g. v1.5.6) pip install -e git++https://github.com/ckan/ckanext-harvest.git@v1.5.6#egg=ckanext-spatial pip install -r https://raw.githubusercontent.com/ckan/ckanext-harvest/v1.5.6/requirements.txt + + ## ckan/ckanext-fluent: https://github.com/mjanez/ckanext-fluen/tags (e.g. v1.0.1) + pip install -e git++https://github.com/mjanez/ckanext-fluent.git@v1.0.1#egg=ckanext-fluent ``` ## Installation @@ -90,16 +106,16 @@ To use custom schemas in `ckanext-scheming`: ```ini # module-path:file to schemas being used - scheming.dataset_schemas = ckanext.schemingdcat:schemas/geodcatap/geodcatap_dataset.yaml - scheming.group_schemas = ckanext.schemingdcat:schemas/geodcatap/geodcatap_group.json - scheming.organization_schemas = ckanext.schemingdcat:schemas/geodcatap/geodcatap_org.json + scheming.dataset_schemas = ckanext.schemingdcat:schemas/geodcat_ap/es_geodcat_ap_full.yaml + scheming.group_schemas = ckanext.schemingdcat:schemas/geodcat_ap/es_geodcat_ap_group.json + scheming.organization_schemas = ckanext.schemingdcat:schemas/geodcat_ap/es_geodcat_ap_org.json # URLs may also be used, e.g: # # scheming.dataset_schemas = http://example.com/spatialx_schema.yaml # Preset files may be included as well. The default preset setting is: - scheming.presets = ckanext.schemingdcat:schemas/geodcatap/geodcatap_presets.json + scheming.presets = ckanext.schemingdcat:schemas/default_presets.json # The is_fallback setting may be changed as well. Defaults to false: scheming.dataset_fallback = false @@ -119,13 +135,13 @@ Examples: * LOD endpoint: A Linked Open Data endpoint is a DCAT endpoint that provides access to RDF data. More information about the catalogue endpoint, how to use the endpoint, (e.g. `https://{ckan-instance-host}/catalog.{format}?[page={page}]&[modified_since={date}]&[profiles={profile1},{profile2}]&[q={query}]&[fq={filter query}]`, and more at [`ckanext-dcat`](https://github.com/mjanez/ckanext-dcat?tab=readme-ov-file#catalog-endpoint) ```yaml - - name: euro_dcat_ap_2_rdf + - name: eu_dcat_ap_2_rdf display_name: RDF DCAT-AP type: lod format: rdf - image_display_url: /images/icons/endpoints/euro_dcat_ap_2.svg + image_display_url: /images/icons/endpoints/eu_dcat_ap_2.svg description: RDF DCAT-AP Endpoint for european data portals. - profile: euro_dcat_ap_2 + profile: eu_dcat_ap_2 profile_label: DCAT-AP version: null ``` @@ -138,7 +154,7 @@ Examples: format: xml image_display_url: /images/icons/endpoints/csw_inspire.svg description: OGC-INSPIRE Endpoint for spatial metadata. - profile: spain_dcat + profile: es_dcat profile_label: INSPIRE version: 2.0.2 ``` @@ -215,7 +231,7 @@ This two last settings are not mandatory. You can omit one or both (or set them Ckan needs to "fix" multivalued fields to be able to recover values correctly for faceting, so this step must be done in order to use faceting with multivalued fields. ### Icons -Icons for each field option in the [`scheming file`](ckanext/schemingdcat/schemas/geodcatap/geodcatap_datasets.yaml) can be set in multiple ways: +Icons for each field option in the [`scheming file`](ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_full.yaml) can be set in multiple ways: - Set a root directory path for icons for each field using the `icons_dir` key in the scheming file. - If `icons_dir` is not defined, the directory path is guessed starting from the value provided for the `schemingdcat.icons_dir` parameter in the CKAN config file, adding the name of the field as an additional step to the path (`public/images/icons/{field_name`). @@ -227,14 +243,27 @@ Icons for each field option in the [`scheming file`](ckanext/schemingdcat/schema ## New theme Update the base theme of CKAN to use with the enhancements of this extension. -![image](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/97b91bdc-b1ec-402a-9750-cfe30ca3201b) -![image](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/48b63c9e-1ab2-4504-b991-2ac63a8875c8) -![image](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/213def6f-5d4c-4786-9d5b-24fed010d307) +**Improved home statistics**: +![image](./doc/img/schemingdcat_home.png) + +**Catalog endpoints** `/endpoints`: +![image](./doc/img/schemingdcat_endpoints.png) + +**Search**: ![screenshot 1695622478](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/bb522849-1319-49cd-ab93-5c3fa5784587) + +**Dataset - Metadata info** `/dataset/{sample-dataset}`: ![screenshot 1695622650](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/7244f9c2-416d-4489-aee8-41cf91ae25a5) ![image](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/5325df04-0ee7-48c3-a924-c8875fc8e2ad) + +**Dataset - Form tabs**: +![image](./doc/img/schemingdcat_form-tabs.png) + +**Organizations** `/organization/{sample-org}`: ![screenshot 1695622687](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/054ff4e5-56a3-4683-9492-1aa0659ee536) + +**Groups** `/group/{sample-group}`: ![screenshot 1695622719](https://github.com/mjanez/ckanext-schemingdcat/assets/96422458/1ecb14c9-9946-4802-8e02-7a51e2911226) ## Schemas @@ -252,7 +281,7 @@ We've made several improvements to our schema to provide a better metadata and m For more details on these enhancements check [Form Groups documentation](#form-groups), please refer to the schema files in [`ckanext/schemingdcat/schemas`](ckanext/schemingdcat/schemas). ### GeoDCAT-AP (ES) -[`schemas/geodcatp_es`](/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml) with specific extensions for spatial data and [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP)/[INSPIRE](https://github.com/INSPIRE-MIF/technical-guidelines) metadata [profiles](https://en.wikipedia.org/wiki/Geospatial_metadata). +[`schemas/geodcat_ap/es_geodcat_ap_full`](/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_full.yaml) with specific extensions for spatial data and [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP)/[INSPIRE](https://github.com/INSPIRE-MIF/technical-guidelines) metadata [profiles](https://en.wikipedia.org/wiki/Geospatial_metadata). > [!NOTE] > RDF to CKAN dataset mapping: [GeoDCAT-AP (ES) to CKAN](ckanext/schemingdcat/schemas/README.md#geodcat-ap-es) @@ -266,13 +295,13 @@ on: [DCAT](https://www.w3.org/TR/vocab-dcat-3/). > RDF to CKAN dataset mapping: [DCAT to CKAN](ckanext/schemingdcat/schemas/README.md#dcat) ### DCAT-AP (EU) -[`schemas/dcatap`](/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml) based on: [DCAT-AP](https://op.europa.eu/en/web/eu-vocabularies/dcat-ap) for the european context. +[`schemas/dcat_ap/eu_dcat_ap`](/ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap.yaml) based on: [DCAT-AP](https://op.europa.eu/en/web/eu-vocabularies/dcat-ap) for the european context. > [!NOTE] > RDF to CKAN dataset mapping: [DCAT-AP (EU) to CKAN](ckanext/schemingdcat/schemas/README.md#dcat-ap-eu) ### GeoDCAT-AP (EU) -[`schemas/geodcatap`](/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml) based on: [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP) for the european context. +[`schemas/geodcat_ap/eu_geodcat_ap`](/ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap.yaml) based on: [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP) for the european context. > [!NOTE] > RDF to CKAN dataset mapping: [GeoDCAT-AP (EU) to CKAN](ckanext/schemingdcat/schemas/README.md#geodcat-ap-eu) @@ -762,9 +791,155 @@ Here are some examples of configuration files: > ... >``` +##TODO: CLI +The `ckan schemingdcat` command offers utilites: + + ckan schemingdcat create-inspire-tags -l es + + ckan schemingdcat download-rdf-eu-vocabs + + +## DCAT Profiles +This plugin also contains a custom [`ckanext-dcat` profiles](./ckanext/schemingdcat/profiles) to serialize a CKAN dataset to a: + +**European context**: +* [DCAT-AP v2.1.1](https://semiceu.github.io/DCAT-AP/releases/2.1.1) (default): `eu_dcat_ap_2` +* [GeoDCAT-AP v2.0.0](https://semiceu.github.io/GeoDCAT-AP/releases/2.0.0): `eu_geodcat_ap_2` +* [GeoDCAT-AP v3.0.0](https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0): `eu_geodcat_ap_3` + +**Spanish context**: +* Spain [NTI-RISP v1.0.0](https://datos.gob.es/es/documentacion/normativa-de-ambito-nacional): `es_dcat` +* Spain [DCAT-AP v2.1.1](https://semiceu.github.io/DCAT-AP/releases/2.1.1): `es_dcat_ap_2` +* Spain [GeoDCAT-AP v2.0.0](https://semiceu.github.io/GeoDCAT-AP/releases/2.0.0): `es_geodcat_ap_2` + +To define which profiles to use you can: + +1. Set the `ckanext.dcat.rdf.profiles` configuration option on your CKAN configuration file: + + ckanext.dcat.rdf.profiles = eu_dcat_ap_2 es_dcat eu_geodcat_ap_2 + +2. When initializing a parser or serializer class, pass the profiles to be used as a parameter, eg: + +```python + + parser = RDFParser(profiles=['eu_dcat_ap_2', 'es_dcat', 'eu_geodcat_ap_2']) + + serializer = RDFSerializer(profiles=['eu_dcat_ap_2', 'es_dcat', 'eu_geodcat_ap_2']) +``` + +Note that in both cases the order in which you define them is important, as it will be the one that the profiles will be run on. + +### Multilingual RDF support +To add multilingual values from CKAN to RDF, the [`SchemingDCATRDFProfile` method `_object_value](./ckanext/schemingdcat/profiles/base.py)` can be called with optional parameter `multilang=true` (defaults to `false`)). +If `_object_value` is called with the `multilang=true`-parameter, but no language-attribute is found, the value will be added as Literal with the default language (en). + +>[!TIP] +> The custom `ckanext-dcat` profiles have multi-language compatibility, see the ckanext-dcat documentation for more information on [writing custom profiles](https://github.com/ckan/ckanext-dcat?tab=readme-ov-file#writing-custom-profiles). + +Example RDF: +```xml +Dataset Title (EN) +Dataset Title (DE) +Dataset Title (FR) +``` +```json +{ + "title": + { + "en": "Dataset Title (EN)", + "de": "Dataset Title (DE)", + "fr": "Dataset Title (FR)" + } +} +``` + +Example with missing language in RDF: +```xml +Dataset Title +``` +```json +{ + "title": + { + "en": "Dataset Title" + } +} +``` + ## Running the Tests To run the tests: pytest --ckan-ini=test.ini ckanext/schemingdcat/tests + +### Run tests quickly with Docker Compose +This repository includes a Docker Compose configuration to simplify running tests. The CKAN image is built using the Dockerfile located in the `docker/` directory. + +To test against the CKAN version you want to use, proceed as follows + +1. Build the necessary Docker images. This step ensures that all dependencies and configurations are correctly set up. + ```shell + docker compose build + ``` + +3. After building the images, you can run the tests. The Docker Compose configuration mounts the root of the repository into the CKAN container as a volume. This means that any changes you make to the code will be reflected inside the container without needing to rebuild the image, unless you modify the extension's dependencies. + ```shell + docker compose up + ``` + + [^1]: An improvement to [`ckanext-fluent`] (https://github.com/ckan/ckanext-fluent) to allow more versatility in multilingual schema creation and metadata validation. + +## Development +### Update Internationalization (i18n) Files +To compile a `.po` file to a `.mo` file in the terminal, you can use the `msgfmt` tool, which is part of the `gettext` package. Here are the steps to do it: + +### Steps to Compile `.po` File to `.mo` File. + +1. **Install `gettext` (if not already installed)**: + - On most Linux distributions, you can install `gettext` using your system's package manager. For example, in Debian/Ubuntu: + + ```sh + sudo apt-get install gettext + ``` + + In Fedora: + + ````sh + sudo dnf install gettext + ``` + +2. **Compile the `.po` file to `.mo`**: + - Use the `msgfmt` command to compile the `.po` file to `.mo`. **Make sure you are in the directory where your `.po` file is located or provide the full path to the file.** + + ```sh + msgfmt -o ckanext-schemingdcat.mo ckanext-schemingdcat.po + ``` + + - This command will generate a `ckanext-schemingdcat.mo` file in the same directory as the `.po` file. + +### Complete Example + +Let's assume your `.po` file is located in the `i18n/en/LC_MESSAGES/` directory inside your project. Here are the complete commands: + +1. 1. **Navigate to the Project Directory**: + + ```sh + cd /path/to/your/project + ``` + +2. **Navigate to the Directory Containing the `.po`** File: + + ````sh + cd i18n/en/LC_MESSAGES/ + ``` + +3. **Compile the `.po` file to `.mo`**: + + ````sh + msgfmt -o ckanext-schemingdcat.mo ckanext-schemingdcat.po + ``` + +### Verification + +1. **Verify that the `.mo` file has been generated in the browser. \ No newline at end of file diff --git a/ckanext/schemingdcat/assets/css/categories/schemingdcat-icons.css b/ckanext/schemingdcat/assets/css/categories/schemingdcat-icons.css index ea94b99..592b7fb 100644 --- a/ckanext/schemingdcat/assets/css/categories/schemingdcat-icons.css +++ b/ckanext/schemingdcat/assets/css/categories/schemingdcat-icons.css @@ -26,74 +26,75 @@ background-position:15px 7px; width:40px; height:40px; - filter: sepia(0.4); + border-radius: 50%; } .category-theme_es:hover, .category-theme_es:focus { - filter: brightness(0.9) saturate(1.2); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + transform: scale(1.2); } -.category-theme_es[data-icon="ciencia-tecnologia"] { +.category-theme_es[data-bs-icon="ciencia-tecnologia"] { background-image: url(../../images/icons/theme_es/sector/ciencia-tecnologia.png); } -.category-theme_es[data-icon="comercio"] { +.category-theme_es[data-bs-icon="comercio"] { background-image: url(../../images/icons/theme_es/sector/comercio.png); } -.category-theme_es[data-icon="cultura-ocio"] { +.category-theme_es[data-bs-icon="cultura-ocio"] { background-image: url(../../images/icons/theme_es/sector/cultura-ocio.png); } -.category-theme_es[data-icon="deporte"] { +.category-theme_es[data-bs-icon="deporte"] { background-image: url(../../images/icons/theme_es/sector/deporte.png); } -.category-theme_es[data-icon="economia"] { +.category-theme_es[data-bs-icon="economia"] { background-image: url(../../images/icons/theme_es/sector/economia.png); } -.category-theme_es[data-icon="educacion"] { +.category-theme_es[data-bs-icon="educacion"] { background-image: url(../../images/icons/theme_es/sector/educacion.png); } -.category-theme_es[data-icon="empleo"] { +.category-theme_es[data-bs-icon="empleo"] { background-image: url(../../images/icons/theme_es/sector/empleo.png); } -.category-theme_es[data-icon="energia"] { +.category-theme_es[data-bs-icon="energia"] { background-image: url(../../images/icons/theme_es/sector/energia.png); } -.category-theme_es[data-icon="hacienda"] { +.category-theme_es[data-bs-icon="hacienda"] { background-image: url(../../images/icons/theme_es/sector/hacienda.png); } -.category-theme_es[data-icon="industria"] { +.category-theme_es[data-bs-icon="industria"] { background-image: url(../../images/icons/theme_es/sector/industria.png); } -.category-theme_es[data-icon="legislacion-justicia"] { +.category-theme_es[data-bs-icon="legislacion-justicia"] { background-image: url(../../images/icons/theme_es/sector/legislacion-justicia.png); } -.category-theme_es[data-icon="medio-ambiente"] { +.category-theme_es[data-bs-icon="medio-ambiente"] { background-image: url(../../images/icons/theme_es/sector/medio-ambiente.png); } -.category-theme_es[data-icon="medio-rural-pesca"] { +.category-theme_es[data-bs-icon="medio-rural-pesca"] { background-image: url(../../images/icons/theme_es/sector/medio-rural-pesca.png); } -.category-theme_es[data-icon="salud"] { +.category-theme_es[data-bs-icon="salud"] { background-image: url(../../images/icons/theme_es/sector/salud.png); } -.category-theme_es[data-icon="sector-publico"] { +.category-theme_es[data-bs-icon="sector-publico"] { background-image: url(../../images/icons/theme_es/sector/sector-publico.png); } -.category-theme_es[data-icon="seguridad"] { +.category-theme_es[data-bs-icon="seguridad"] { background-image: url(../../images/icons/theme_es/sector/seguridad.png); } -.category-theme_es[data-icon="sociedad-bienestar"] { +.category-theme_es[data-bs-icon="sociedad-bienestar"] { background-image: url(../../images/icons/theme_es/sector/sociedad-bienestar.png); } -.category-theme_es[data-icon="transporte"] { +.category-theme_es[data-bs-icon="transporte"] { background-image: url(../../images/icons/theme_es/sector/transporte.png); } -.category-theme_es[data-icon="turismo"] { +.category-theme_es[data-bs-icon="turismo"] { background-image: url(../../images/icons/theme_es/sector/turismo.png); } -.category-theme_es[data-icon="urbanismo-infraestructuras"] { +.category-theme_es[data-bs-icon="urbanismo-infraestructuras"] { background-image: url(../../images/icons/theme_es/sector/urbanismo-infraestructuras.png); } -.category-theme_es[data-icon="vivienda"] { +.category-theme_es[data-bs-icon="vivienda"] { background-image: url(../../images/icons/theme_es/sector/vivienda.png); } @@ -104,164 +105,166 @@ background-position:15px 7px; width:40px; height:40px; - filter: sepia(0.4); + border-radius: 50%; } .category-theme:hover, .category-theme:focus { - filter: brightness(0.9) saturate(1.2); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + transform: scale(1.2); } - -.category-theme[data-icon="ac"] { +.category-theme[data-bs-icon="ac"] { background-image: url(../../images/icons/theme/theme/ac.svg); } -.category-theme[data-icon="ad"] { +.category-theme[data-bs-icon="ad"] { background-image: url(../../images/icons/theme/theme/ad.svg); } -.category-theme[data-icon="af"] { +.category-theme[data-bs-icon="af"] { background-image: url(../../images/icons/theme/theme/af.svg); } -.category-theme[data-icon="am"] { +.category-theme[data-bs-icon="am"] { background-image: url(../../images/icons/theme/theme/am.svg); } -.category-theme[data-icon="au"] { +.category-theme[data-bs-icon="au"] { background-image: url(../../images/icons/theme/theme/au.svg); } -.category-theme[data-icon="br"] { +.category-theme[data-bs-icon="br"] { background-image: url(../../images/icons/theme/theme/br.svg); } -.category-theme[data-icon="bu"] { +.category-theme[data-bs-icon="bu"] { background-image: url(../../images/icons/theme/theme/bu.svg); } -.category-theme[data-icon="cp"] { +.category-theme[data-bs-icon="cp"] { background-image: url(../../images/icons/theme/theme/cp.svg); } -.category-theme[data-icon="ef"] { +.category-theme[data-bs-icon="ef"] { background-image: url(../../images/icons/theme/theme/ef.svg); } -.category-theme[data-icon="el"] { +.category-theme[data-bs-icon="el"] { background-image: url(../../images/icons/theme/theme/el.svg); } -.category-theme[data-icon="er"] { +.category-theme[data-bs-icon="er"] { background-image: url(../../images/icons/theme/theme/er.svg); } -.category-theme[data-icon="ge"] { +.category-theme[data-bs-icon="ge"] { background-image: url(../../images/icons/theme/theme/ge.svg); } -.category-theme[data-icon="gg"] { +.category-theme[data-bs-icon="gg"] { background-image: url(../../images/icons/theme/theme/gg.svg); } -.category-theme[data-icon="gn"] { +.category-theme[data-bs-icon="gn"] { background-image: url(../../images/icons/theme/theme/gn.svg); } -.category-theme[data-icon="hb"] { +.category-theme[data-bs-icon="hb"] { background-image: url(../../images/icons/theme/theme/hb.svg); } -.category-theme[data-icon="hh"] { +.category-theme[data-bs-icon="hh"] { background-image: url(../../images/icons/theme/theme/hh.svg); } -.category-theme[data-icon="hy"] { +.category-theme[data-bs-icon="hy"] { background-image: url(../../images/icons/theme/theme/hy.svg); } -.category-theme[data-icon="lc"] { +.category-theme[data-bs-icon="lc"] { background-image: url(../../images/icons/theme/theme/lc.svg); } -.category-theme[data-icon="lu"] { +.category-theme[data-bs-icon="lu"] { background-image: url(../../images/icons/theme/theme/lu.svg); } -.category-theme[data-icon="mf"] { +.category-theme[data-bs-icon="mf"] { background-image: url(../../images/icons/theme/theme/mf.svg); } -.category-theme[data-icon="mr"] { +.category-theme[data-bs-icon="mr"] { background-image: url(../../images/icons/theme/theme/mr.svg); } -.category-theme[data-icon="nz"] { +.category-theme[data-bs-icon="nz"] { background-image: url(../../images/icons/theme/theme/nz.svg); } -.category-theme[data-icon="of"] { +.category-theme[data-bs-icon="of"] { background-image: url(../../images/icons/theme/theme/of.svg); } -.category-theme[data-icon="oi"] { +.category-theme[data-bs-icon="oi"] { background-image: url(../../images/icons/theme/theme/oi.svg); } -.category-theme[data-icon="pd"] { +.category-theme[data-bs-icon="pd"] { background-image: url(../../images/icons/theme/theme/pd.svg); } -.category-theme[data-icon="pf"] { +.category-theme[data-bs-icon="pf"] { background-image: url(../../images/icons/theme/theme/pf.svg); } -.category-theme[data-icon="ps"] { +.category-theme[data-bs-icon="ps"] { background-image: url(../../images/icons/theme/theme/ps.svg); } -.category-theme[data-icon="rs"] { +.category-theme[data-bs-icon="rs"] { background-image: url(../../images/icons/theme/theme/rs.svg); } -.category-theme[data-icon="sd"] { +.category-theme[data-bs-icon="sd"] { background-image: url(../../images/icons/theme/theme/sd.svg); } -.category-theme[data-icon="so"] { +.category-theme[data-bs-icon="so"] { background-image: url(../../images/icons/theme/theme/so.svg); } -.category-theme[data-icon="sr"] { +.category-theme[data-bs-icon="sr"] { background-image: url(../../images/icons/theme/theme/sr.svg); } -.category-theme[data-icon="su"] { +.category-theme[data-bs-icon="su"] { background-image: url(../../images/icons/theme/theme/su.svg); } -.category-theme[data-icon="tn"] { +.category-theme[data-bs-icon="tn"] { background-image: url(../../images/icons/theme/theme/tn.svg); } -.category-theme[data-icon="us"] { +.category-theme[data-bs-icon="us"] { background-image: url(../../images/icons/theme/theme/us.svg); } -/* theme_eu: theme_eu-data-theme */ +/* theme_eu: theme_eu-data-bs-theme */ .category-theme_eu{ background-repeat:no-repeat; background-size:30px auto; background-position:15px 7px; width:40px; height:40px; - filter: sepia(0.4); + border-radius: 50%; } .category-theme_eu:hover, .category-theme_eu:focus { - filter: brightness(0.9) saturate(1.2); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + transform: scale(1.2); } -.category-theme_eu[data-icon="agri"] { - background-image: url(../../images/icons/theme_eu/data-theme/agri.png); + +.category-theme_eu[data-bs-icon="agri"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/agri.png); } -.category-theme_eu[data-icon="econ"] { - background-image: url(../../images/icons/theme_eu/data-theme/econ.png); +.category-theme_eu[data-bs-icon="econ"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/econ.png); } -.category-theme_eu[data-icon="educ"] { - background-image: url(../../images/icons/theme_eu/data-theme/educ.png); +.category-theme_eu[data-bs-icon="educ"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/educ.png); } -.category-theme_eu[data-icon="ener"] { - background-image: url(../../images/icons/theme_eu/data-theme/ener.png); +.category-theme_eu[data-bs-icon="ener"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/ener.png); } -.category-theme_eu[data-icon="envi"] { - background-image: url(../../images/icons/theme_eu/data-theme/envi.png); +.category-theme_eu[data-bs-icon="envi"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/envi.png); } -.category-theme_eu[data-icon="gove"] { - background-image: url(../../images/icons/theme_eu/data-theme/gove.png); +.category-theme_eu[data-bs-icon="gove"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/gove.png); } -.category-theme_eu[data-icon="heal"] { - background-image: url(../../images/icons/theme_eu/data-theme/heal.png); +.category-theme_eu[data-bs-icon="heal"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/heal.png); } -.category-theme_eu[data-icon="intr"] { - background-image: url(../../images/icons/theme_eu/data-theme/intr.png); +.category-theme_eu[data-bs-icon="intr"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/intr.png); } -.category-theme_eu[data-icon="just"] { - background-image: url(../../images/icons/theme_eu/data-theme/just.png); +.category-theme_eu[data-bs-icon="just"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/just.png); } -.category-theme_eu[data-icon="regi"] { - background-image: url(../../images/icons/theme_eu/data-theme/regi.png); +.category-theme_eu[data-bs-icon="regi"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/regi.png); } -.category-theme_eu[data-icon="soci"] { - background-image: url(../../images/icons/theme_eu/data-theme/soci.png); +.category-theme_eu[data-bs-icon="soci"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/soci.png); } -.category-theme_eu[data-icon="tech"] { - background-image: url(../../images/icons/theme_eu/data-theme/tech.png); +.category-theme_eu[data-bs-icon="tech"] { + background-image: url(../../images/icons/theme_eu/data-bs-theme/tech.png); } @@ -272,341 +275,340 @@ background-position: 15px 7px; width: 40px; height: 40px; - border-radius: 30%; - filter: sepia(0.4); + border-radius: 50%; } .category-spatial_uri:hover, .category-spatial_uri:focus { - filter: brightness(1) saturate(1); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + transform: scale(1.2); } - /* spain/autonomia */ /* Andalucía and provinces */ -.category-spatial_uri[data-icon="andalucia"], -.category-spatial_uri[data-icon="almeria"], -.category-spatial_uri[data-icon="cadiz"], -.category-spatial_uri[data-icon="cordoba"], -.category-spatial_uri[data-icon="granada"], -.category-spatial_uri[data-icon="huelva"], -.category-spatial_uri[data-icon="jaen"], -.category-spatial_uri[data-icon="malaga"], -.category-spatial_uri[data-icon="sevilla"] { +.category-spatial_uri[data-bs-icon="andalucia"], +.category-spatial_uri[data-bs-icon="almeria"], +.category-spatial_uri[data-bs-icon="cadiz"], +.category-spatial_uri[data-bs-icon="cordoba"], +.category-spatial_uri[data-bs-icon="granada"], +.category-spatial_uri[data-bs-icon="huelva"], +.category-spatial_uri[data-bs-icon="jaen"], +.category-spatial_uri[data-bs-icon="malaga"], +.category-spatial_uri[data-bs-icon="sevilla"] { background-image: url(../../images/icons/spatial_uri/autonomia/andalucia.jpg); } /* Aragón and provinces */ -.category-spatial_uri[data-icon="aragon"], -.category-spatial_uri[data-icon="huesca"], -.category-spatial_uri[data-icon="teruel"], -.category-spatial_uri[data-icon="zaragoza"] { +.category-spatial_uri[data-bs-icon="aragon"], +.category-spatial_uri[data-bs-icon="huesca"], +.category-spatial_uri[data-bs-icon="teruel"], +.category-spatial_uri[data-bs-icon="zaragoza"] { background-image: url(../../images/icons/spatial_uri/autonomia/aragon.jpg); } /* Canarias and provinces */ -.category-spatial_uri[data-icon="canarias"], -.category-spatial_uri[data-icon="las-palmas"], -.category-spatial_uri[data-icon="santa-cruz-tenerife"] { +.category-spatial_uri[data-bs-icon="canarias"], +.category-spatial_uri[data-bs-icon="las-palmas"], +.category-spatial_uri[data-bs-icon="santa-cruz-tenerife"] { background-image: url(../../images/icons/spatial_uri/autonomia/canarias.jpg); } /* Cantabria */ -.category-spatial_uri[data-icon="cantabria"] { +.category-spatial_uri[data-bs-icon="cantabria"] { background-image: url(../../images/icons/spatial_uri/autonomia/cantabria.jpg); } /* Castilla-La Mancha and provinces */ -.category-spatial_uri[data-icon="castilla-la-mancha"], -.category-spatial_uri[data-icon="albacete"], -.category-spatial_uri[data-icon="ciudad-real"], -.category-spatial_uri[data-icon="cuenca"], -.category-spatial_uri[data-icon="guadalajara"], -.category-spatial_uri[data-icon="toledo"] { +.category-spatial_uri[data-bs-icon="castilla-la-mancha"], +.category-spatial_uri[data-bs-icon="albacete"], +.category-spatial_uri[data-bs-icon="ciudad-real"], +.category-spatial_uri[data-bs-icon="cuenca"], +.category-spatial_uri[data-bs-icon="guadalajara"], +.category-spatial_uri[data-bs-icon="toledo"] { background-image: url(../../images/icons/spatial_uri/autonomia/castilla-la-mancha.jpg); } /* Castilla y León and provinces */ -.category-spatial_uri[data-icon="castilla-leon"], -.category-spatial_uri[data-icon="avila"], -.category-spatial_uri[data-icon="burgos"], -.category-spatial_uri[data-icon="leon"], -.category-spatial_uri[data-icon="palencia"], -.category-spatial_uri[data-icon="salamanca"], -.category-spatial_uri[data-icon="segovia"], -.category-spatial_uri[data-icon="soria"], -.category-spatial_uri[data-icon="valladolid"], -.category-spatial_uri[data-icon="zamora"] { +.category-spatial_uri[data-bs-icon="castilla-leon"], +.category-spatial_uri[data-bs-icon="avila"], +.category-spatial_uri[data-bs-icon="burgos"], +.category-spatial_uri[data-bs-icon="leon"], +.category-spatial_uri[data-bs-icon="palencia"], +.category-spatial_uri[data-bs-icon="salamanca"], +.category-spatial_uri[data-bs-icon="segovia"], +.category-spatial_uri[data-bs-icon="soria"], +.category-spatial_uri[data-bs-icon="valladolid"], +.category-spatial_uri[data-bs-icon="zamora"] { background-image: url(../../images/icons/spatial_uri/autonomia/castilla-leon.jpg); } /* Cataluña and provinces */ -.category-spatial_uri[data-icon="cataluna"], -.category-spatial_uri[data-icon="barcelona"], -.category-spatial_uri[data-icon="girona"], -.category-spatial_uri[data-icon="lleida"], -.category-spatial_uri[data-icon="tarragona"] { +.category-spatial_uri[data-bs-icon="cataluna"], +.category-spatial_uri[data-bs-icon="barcelona"], +.category-spatial_uri[data-bs-icon="girona"], +.category-spatial_uri[data-bs-icon="lleida"], +.category-spatial_uri[data-bs-icon="tarragona"] { background-image: url(../../images/icons/spatial_uri/autonomia/cataluna.jpg); } /* Ceuta */ -.category-spatial_uri[data-icon="ceuta"] { +.category-spatial_uri[data-bs-icon="ceuta"] { background-image: url(../../images/icons/spatial_uri/autonomia/ceuta.jpg); } /* Comunidad Foral de Navarra */ -.category-spatial_uri[data-icon="comunidad-foral-navarra"], -.category-spatial_uri[data-icon="navarra"] { +.category-spatial_uri[data-bs-icon="comunidad-foral-navarra"], +.category-spatial_uri[data-bs-icon="navarra"] { background-image: url(../../images/icons/spatial_uri/autonomia/comunidad-foral-navarra.jpg); } /* Comunidad de Madrid */ -.category-spatial_uri[data-icon="comunidad-madrid"], -.category-spatial_uri[data-icon="madrid"] { +.category-spatial_uri[data-bs-icon="comunidad-madrid"], +.category-spatial_uri[data-bs-icon="madrid"] { background-image: url(../../images/icons/spatial_uri/autonomia/comunidad-madrid.jpg); } /* Comunidad Valenciana and provinces */ -.category-spatial_uri[data-icon="comunitat-valenciana"], -.category-spatial_uri[data-icon="alicante"], -.category-spatial_uri[data-icon="castellon"], -.category-spatial_uri[data-icon="valencia"] { +.category-spatial_uri[data-bs-icon="comunitat-valenciana"], +.category-spatial_uri[data-bs-icon="alicante"], +.category-spatial_uri[data-bs-icon="castellon"], +.category-spatial_uri[data-bs-icon="valencia"] { background-image: url(../../images/icons/spatial_uri/autonomia/comunitat-valenciana.jpg); } /* Extremadura and provinces */ -.category-spatial_uri[data-icon="extremadura"], -.category-spatial_uri[data-icon="badajoz"], -.category-spatial_uri[data-icon="caceres"] { +.category-spatial_uri[data-bs-icon="extremadura"], +.category-spatial_uri[data-bs-icon="badajoz"], +.category-spatial_uri[data-bs-icon="caceres"] { background-image: url(../../images/icons/spatial_uri/autonomia/extremadura.jpg); } /* Galicia and provinces */ -.category-spatial_uri[data-icon="galicia"], -.category-spatial_uri[data-icon="a-coruna"], -.category-spatial_uri[data-icon="lugo"], -.category-spatial_uri[data-icon="ourense"], -.category-spatial_uri[data-icon="pontevedra"] { +.category-spatial_uri[data-bs-icon="galicia"], +.category-spatial_uri[data-bs-icon="a-coruna"], +.category-spatial_uri[data-bs-icon="lugo"], +.category-spatial_uri[data-bs-icon="ourense"], +.category-spatial_uri[data-bs-icon="pontevedra"] { background-image: url(../../images/icons/spatial_uri/autonomia/galicia.jpg); } /* Illes Balears */ -.category-spatial_uri[data-icon="illes-balears"] { +.category-spatial_uri[data-bs-icon="illes-balears"] { background-image: url(../../images/icons/spatial_uri/autonomia/illes-balears.jpg); } /* La Rioja */ -.category-spatial_uri[data-icon="la-rioja"] { +.category-spatial_uri[data-bs-icon="la-rioja"] { background-image: url(../../images/icons/spatial_uri/autonomia/la-rioja.jpg); } /* Melilla */ -.category-spatial_uri[data-icon="melilla"] { +.category-spatial_uri[data-bs-icon="melilla"] { background-image: url(../../images/icons/spatial_uri/autonomia/melilla.jpg); } /* País Vasco and provinces */ -.category-spatial_uri[data-icon="pais-vasco"], -.category-spatial_uri[data-icon="alava"], -.category-spatial_uri[data-icon="guipuzcoa"], -.category-spatial_uri[data-icon="vizcaya"] { +.category-spatial_uri[data-bs-icon="pais-vasco"], +.category-spatial_uri[data-bs-icon="alava"], +.category-spatial_uri[data-bs-icon="guipuzcoa"], +.category-spatial_uri[data-bs-icon="vizcaya"] { background-image: url(../../images/icons/spatial_uri/autonomia/pais-vasco.jpg); } /* Principado de Asturias */ -.category-spatial_uri[data-icon="principado-asturias"], -.category-spatial_uri[data-icon="asturias"] { +.category-spatial_uri[data-bs-icon="principado-asturias"], +.category-spatial_uri[data-bs-icon="asturias"] { background-image: url(../../images/icons/spatial_uri/autonomia/principado-asturias.jpg); } /* Región de Murcia */ -.category-spatial_uri[data-icon="region-murcia"], -.category-spatial_uri[data-icon="murcia"] { +.category-spatial_uri[data-bs-icon="region-murcia"], +.category-spatial_uri[data-bs-icon="murcia"] { background-image: url(../../images/icons/spatial_uri/autonomia/region-murcia.jpg); } /* spain/pais */ -.category-spatial_uri[data-icon="españa"] { +.category-spatial_uri[data-bs-icon="españa"] { background-image: url(../../images/icons/spatial_uri/pais/españa.jpg); } /* country */ -.category-spatial_uri[data-icon="1a0"] { +.category-spatial_uri[data-bs-icon="1a0"] { background-image: url(../../images/icons/spatial_uri/country/1a0.svg); } -.category-spatial_uri[data-icon="alb"] { +.category-spatial_uri[data-bs-icon="alb"] { background-image: url(../../images/icons/spatial_uri/country/alb.svg); } -.category-spatial_uri[data-icon="and"] { +.category-spatial_uri[data-bs-icon="and"] { background-image: url(../../images/icons/spatial_uri/country/and.svg); } -.category-spatial_uri[data-icon="arg"] { +.category-spatial_uri[data-bs-icon="arg"] { background-image: url(../../images/icons/spatial_uri/country/arg.svg); } -.category-spatial_uri[data-icon="arm"] { +.category-spatial_uri[data-bs-icon="arm"] { background-image: url(../../images/icons/spatial_uri/country/arm.svg); } -.category-spatial_uri[data-icon="aus"] { +.category-spatial_uri[data-bs-icon="aus"] { background-image: url(../../images/icons/spatial_uri/country/aus.svg); } -.category-spatial_uri[data-icon="aut"] { +.category-spatial_uri[data-bs-icon="aut"] { background-image: url(../../images/icons/spatial_uri/country/aut.svg); } -.category-spatial_uri[data-icon="aze"] { +.category-spatial_uri[data-bs-icon="aze"] { background-image: url(../../images/icons/spatial_uri/country/aze.svg); } -.category-spatial_uri[data-icon="bel"] { +.category-spatial_uri[data-bs-icon="bel"] { background-image: url(../../images/icons/spatial_uri/country/bel.svg); } -.category-spatial_uri[data-icon="bgr"] { +.category-spatial_uri[data-bs-icon="bgr"] { background-image: url(../../images/icons/spatial_uri/country/bgr.svg); } -.category-spatial_uri[data-icon="bih"] { +.category-spatial_uri[data-bs-icon="bih"] { background-image: url(../../images/icons/spatial_uri/country/bih.svg); } -.category-spatial_uri[data-icon="blr"] { +.category-spatial_uri[data-bs-icon="blr"] { background-image: url(../../images/icons/spatial_uri/country/blr.svg); } -.category-spatial_uri[data-icon="bra"] { +.category-spatial_uri[data-bs-icon="bra"] { background-image: url(../../images/icons/spatial_uri/country/bra.svg); } -.category-spatial_uri[data-icon="can"] { +.category-spatial_uri[data-bs-icon="can"] { background-image: url(../../images/icons/spatial_uri/country/can.svg); } -.category-spatial_uri[data-icon="che"] { +.category-spatial_uri[data-bs-icon="che"] { background-image: url(../../images/icons/spatial_uri/country/che.svg); } -.category-spatial_uri[data-icon="chn"] { +.category-spatial_uri[data-bs-icon="chn"] { background-image: url(../../images/icons/spatial_uri/country/chn.svg); } -.category-spatial_uri[data-icon="cyp"] { +.category-spatial_uri[data-bs-icon="cyp"] { background-image: url(../../images/icons/spatial_uri/country/cyp.svg); } -.category-spatial_uri[data-icon="cze"] { +.category-spatial_uri[data-bs-icon="cze"] { background-image: url(../../images/icons/spatial_uri/country/cze.svg); } -.category-spatial_uri[data-icon="deu"] { +.category-spatial_uri[data-bs-icon="deu"] { background-image: url(../../images/icons/spatial_uri/country/deu.svg); } -.category-spatial_uri[data-icon="dnk"] { +.category-spatial_uri[data-bs-icon="dnk"] { background-image: url(../../images/icons/spatial_uri/country/dnk.svg); } -.category-spatial_uri[data-icon="esp"] { +.category-spatial_uri[data-bs-icon="esp"] { background-image: url(../../images/icons/spatial_uri/country/esp.svg); } -.category-spatial_uri[data-icon="est"] { +.category-spatial_uri[data-bs-icon="est"] { background-image: url(../../images/icons/spatial_uri/country/est.svg); } -.category-spatial_uri[data-icon="eur"] { +.category-spatial_uri[data-bs-icon="eur"] { background-image: url(../../images/icons/spatial_uri/country/eur.svg); } -.category-spatial_uri[data-icon="fin"] { +.category-spatial_uri[data-bs-icon="fin"] { background-image: url(../../images/icons/spatial_uri/country/fin.svg); } -.category-spatial_uri[data-icon="fra"] { +.category-spatial_uri[data-bs-icon="fra"] { background-image: url(../../images/icons/spatial_uri/country/fra.svg); } -.category-spatial_uri[data-icon="fro"] { +.category-spatial_uri[data-bs-icon="fro"] { background-image: url(../../images/icons/spatial_uri/country/fro.svg); } -.category-spatial_uri[data-icon="gbr"] { +.category-spatial_uri[data-bs-icon="gbr"] { background-image: url(../../images/icons/spatial_uri/country/gbr.svg); } -.category-spatial_uri[data-icon="geo"] { +.category-spatial_uri[data-bs-icon="geo"] { background-image: url(../../images/icons/spatial_uri/country/geo.svg); } -.category-spatial_uri[data-icon="grc"] { +.category-spatial_uri[data-bs-icon="grc"] { background-image: url(../../images/icons/spatial_uri/country/grc.svg); } -.category-spatial_uri[data-icon="grl"] { +.category-spatial_uri[data-bs-icon="grl"] { background-image: url(../../images/icons/spatial_uri/country/grl.svg); } -.category-spatial_uri[data-icon="hrv"] { +.category-spatial_uri[data-bs-icon="hrv"] { background-image: url(../../images/icons/spatial_uri/country/hrv.svg); } -.category-spatial_uri[data-icon="hun"] { +.category-spatial_uri[data-bs-icon="hun"] { background-image: url(../../images/icons/spatial_uri/country/hun.svg); } -.category-spatial_uri[data-icon="irl"] { +.category-spatial_uri[data-bs-icon="irl"] { background-image: url(../../images/icons/spatial_uri/country/irl.svg); } -.category-spatial_uri[data-icon="isl"] { +.category-spatial_uri[data-bs-icon="isl"] { background-image: url(../../images/icons/spatial_uri/country/isl.svg); } -.category-spatial_uri[data-icon="isr"] { +.category-spatial_uri[data-bs-icon="isr"] { background-image: url(../../images/icons/spatial_uri/country/isr.svg); } -.category-spatial_uri[data-icon="ita"] { +.category-spatial_uri[data-bs-icon="ita"] { background-image: url(../../images/icons/spatial_uri/country/ita.svg); } -.category-spatial_uri[data-icon="jpn"] { +.category-spatial_uri[data-bs-icon="jpn"] { background-image: url(../../images/icons/spatial_uri/country/jpn.svg); } -.category-spatial_uri[data-icon="lie"] { +.category-spatial_uri[data-bs-icon="lie"] { background-image: url(../../images/icons/spatial_uri/country/lie.svg); } -.category-spatial_uri[data-icon="ltu"] { +.category-spatial_uri[data-bs-icon="ltu"] { background-image: url(../../images/icons/spatial_uri/country/ltu.svg); } -.category-spatial_uri[data-icon="lux"] { +.category-spatial_uri[data-bs-icon="lux"] { background-image: url(../../images/icons/spatial_uri/country/lux.svg); } -.category-spatial_uri[data-icon="lva"] { +.category-spatial_uri[data-bs-icon="lva"] { background-image: url(../../images/icons/spatial_uri/country/lva.svg); } -.category-spatial_uri[data-icon="mda"] { +.category-spatial_uri[data-bs-icon="mda"] { background-image: url(../../images/icons/spatial_uri/country/mda.svg); } -.category-spatial_uri[data-icon="mex"] { +.category-spatial_uri[data-bs-icon="mex"] { background-image: url(../../images/icons/spatial_uri/country/mex.svg); } -.category-spatial_uri[data-icon="mkd"] { +.category-spatial_uri[data-bs-icon="mkd"] { background-image: url(../../images/icons/spatial_uri/country/mkd.svg); } -.category-spatial_uri[data-icon="mlt"] { +.category-spatial_uri[data-bs-icon="mlt"] { background-image: url(../../images/icons/spatial_uri/country/mlt.svg); } -.category-spatial_uri[data-icon="mne"] { +.category-spatial_uri[data-bs-icon="mne"] { background-image: url(../../images/icons/spatial_uri/country/mne.svg); } -.category-spatial_uri[data-icon="nld"] { +.category-spatial_uri[data-bs-icon="nld"] { background-image: url(../../images/icons/spatial_uri/country/nld.svg); } -.category-spatial_uri[data-icon="nor"] { +.category-spatial_uri[data-bs-icon="nor"] { background-image: url(../../images/icons/spatial_uri/country/nor.svg); } -.category-spatial_uri[data-icon="nzl"] { +.category-spatial_uri[data-bs-icon="nzl"] { background-image: url(../../images/icons/spatial_uri/country/nzl.svg); } -.category-spatial_uri[data-icon="pol"] { +.category-spatial_uri[data-bs-icon="pol"] { background-image: url(../../images/icons/spatial_uri/country/pol.svg); } -.category-spatial_uri[data-icon="prt"] { +.category-spatial_uri[data-bs-icon="prt"] { background-image: url(../../images/icons/spatial_uri/country/prt.svg); } -.category-spatial_uri[data-icon="rou"] { +.category-spatial_uri[data-bs-icon="rou"] { background-image: url(../../images/icons/spatial_uri/country/rou.svg); } -.category-spatial_uri[data-icon="rus"] { +.category-spatial_uri[data-bs-icon="rus"] { background-image: url(../../images/icons/spatial_uri/country/rus.svg); } -.category-spatial_uri[data-icon="srb"] { +.category-spatial_uri[data-bs-icon="srb"] { background-image: url(../../images/icons/spatial_uri/country/srb.svg); } -.category-spatial_uri[data-icon="svk"] { +.category-spatial_uri[data-bs-icon="svk"] { background-image: url(../../images/icons/spatial_uri/country/svk.svg); } -.category-spatial_uri[data-icon="svn"] { +.category-spatial_uri[data-bs-icon="svn"] { background-image: url(../../images/icons/spatial_uri/country/svn.svg); } -.category-spatial_uri[data-icon="swe"] { +.category-spatial_uri[data-bs-icon="swe"] { background-image: url(../../images/icons/spatial_uri/country/swe.svg); } -.category-spatial_uri[data-icon="tur"] { +.category-spatial_uri[data-bs-icon="tur"] { background-image: url(../../images/icons/spatial_uri/country/tur.svg); } -.category-spatial_uri[data-icon="ukr"] { +.category-spatial_uri[data-bs-icon="ukr"] { background-image: url(../../images/icons/spatial_uri/country/ukr.svg); } -.category-spatial_uri[data-icon="usa"] { +.category-spatial_uri[data-bs-icon="usa"] { background-image: url(../../images/icons/spatial_uri/country/usa.svg); } -.category-spatial_uri[data-icon="vat"] { +.category-spatial_uri[data-bs-icon="vat"] { background-image: url(../../images/icons/spatial_uri/country/vat.svg); } \ No newline at end of file diff --git a/ckanext/schemingdcat/assets/css/ft-syntax-highlight.min.css b/ckanext/schemingdcat/assets/css/ft-syntax-highlight.min.css index 56287ce..601dfcd 100644 --- a/ckanext/schemingdcat/assets/css/ft-syntax-highlight.min.css +++ b/ckanext/schemingdcat/assets/css/ft-syntax-highlight.min.css @@ -1 +1 @@ -@import url(https://fonts.googleapis.com/css?family=Source+Code+Pro:200,300,400);@-webkit-keyframes tooltips-vert{to{opacity:.9;-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}}@-moz-keyframes tooltips-vert{to{opacity:.9;-moz-transform:translate(-50%,0);transform:translate(-50%,0)}}@-o-keyframes tooltips-vert{to{opacity:.9;-o-transform:translate(-50%,0);transform:translate(-50%,0)}}@keyframes tooltips-vert{to{opacity:.9;-webkit-transform:translate(-50%,0);-moz-transform:translate(-50%,0);-o-transform:translate(-50%,0);transform:translate(-50%,0)}}pre.ft-syntax-highlight{display:block;position:relative;padding:30px 0 0;font-size:.85rem;letter-spacing:.5px;color:#d3d3d3;background-color:#2d2832;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='304' height='304' viewBox='0 0 304 304' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-206-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2a5 5 0 1 0-2 0V82h64v-2h-62V21.9zm16 16a5 5 0 1 0-2 0V66h48v-2h-46V37.9zm-128 96a5 5 0 1 0-2 0V210h16v10.1a5 5 0 1 0 2 0V208h-16v-74.1zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9a5 5 0 1 0-2 0V144H53.9a5 5 0 1 0 0 2H98v-44.1zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9a5 5 0 1 0-2 0V64H80v64H69.9a5 5 0 1 0 0 2H82V66h32V37.9zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9a5 5 0 1 0-2 0V162h16v30h-16v66h48v46h2v-48h-48v-62h16v-34h-16v-10.1zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.172l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.513L175.586 80H224V21.9a5 5 0 1 1 2 0V82h-49.586L146 112.414V188.1zm16 32a5 5 0 1 1-2 0v-99.513L184.586 96H300.1a5.004 5.004 0 0 1 3.9-3.9v2.07a3.004 3.004 0 0 0 0 5.66v2.07a5.004 5.004 0 0 1-3.9-3.9H185.414L162 121.414V220.1zm-144-64a5 5 0 1 1-2 0v-3.513l48-48V48h32V0h2v50H66v55.413l-48 48v2.687zM50 53.9a5 5 0 1 0-2 0v42.686l-48 48V210h28.1a5 5 0 1 0 0-2H2v-62.586l48-48V53.9zm-16 16a5 5 0 1 0-2 0v18.686l-32 32v2.828l34-34V69.9zM12.1 32a5 5 0 1 1 0 2H9.414L0 43.414v-2.828L8.586 32H12.1zm265.8 18a5 5 0 1 1 0-2h18.686L304 40.586v2.828L297.414 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.413l16-16v2.827l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.586L40.586 194H21.9a5 5 0 1 1 0-2h19.513L66 216.586V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.598L56.598 162H37.9a5 5 0 1 1 0-2h19.502L98 200.598V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.586L48.586 178H21.9a5 5 0 1 1 0-2h27.513L82 208.586V258H53.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM34 39.793V0h-2v40.586L8.586 64H0v2h9.413L34 41.414v-1.62zM2 300.1V258h14v46h2v-48H0v46.17A3.004 3.004 0 0 1 3.83 304H5.9a5.004 5.004 0 0 0-3.9-3.9zM34 241v63h-2v-62H0v-2h34v1zM17 18h1V0h-2v16H0v2h17zm273-2V0h-2v18h16v-2h-14zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.002 5.002 0 0 1 6 97a5.002 5.002 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32a5 5 0 0 0-9.8 0h2.07a3.004 3.004 0 0 1 5.66 0h2.07zM5.9 0A5.002 5.002 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0a5 5 0 0 0 3.9 5.9V3.83A3.004 3.004 0 0 1 302.17 0h-2.07zm3.9 300.1a5.004 5.004 0 0 0-3.9 3.9h2.07a3.016 3.016 0 0 1 1.83-1.83v-2.07z' fill='%2345404b' fill-opacity='.1' fill-rule='evenodd'/%3E%3C/svg%3E")}pre.ft-syntax-highlight::before{position:absolute;top:0;left:0;width:100%;padding:10px 0;text-indent:25px;font-weight:700;font-size:1.2rem;text-transform:uppercase;color:#888;letter-spacing:.8px;content:attr(data-syntax);direction:rtl}pre.ft-syntax-highlight code{font-family:'Source Code Pro',monospace;counter-reset:line -1;display:block;margin:-25px 10px -28px 10px;padding:0 10px 10px 0;max-height:400px;overflow:auto}pre.ft-syntax-highlight code span.newline::before{position:relative;right:20px;color:#d3d3d3;counter-increment:line;content:counter(line);font-weight:200}pre.ft-syntax-highlight code span.newline:nth-of-type(n+11)::before{position:relative;right:28px}pre.ft-syntax-highlight code span.newline:nth-of-type(n+101)::before{position:relative;right:36px}@media all and (max-width:550px){pre.ft-syntax-highlight{font-size:calc(9px + .8vw)}}@media all and (max-width:225px){pre.ft-syntax-highlight[data-ui-theme=macosx i]::before{text-align:left;text-indent:55%}pre.ft-syntax-highlight[data-ui-theme=win95 i]::after{display:none}}pre.ft-syntax-highlight code::-webkit-scrollbar-track{background-color:transparent}pre.ft-syntax-highlight code::-webkit-scrollbar{width:10px;height:10px;border-radius:10px;background-color:rgba(255,255,255,.4)}pre.ft-syntax-highlight code::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:rgba(255,255,255,.5)}pre.ft-syntax-highlight code::-webkit-scrollbar-corner{display:none}pre.ft-syntax-highlight[data-ui-theme=bootstrap4] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-ui-theme=burberry] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-ui-theme=light] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-ui-theme=simple] code::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4)}pre.ft-syntax-highlight[data-ui-theme=bootstrap4] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-ui-theme=burberry] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-ui-theme=light] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-ui-theme=simple] code::-webkit-scrollbar{background-color:rgba(0,0,0,.4)}pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline):not(.url){position:relative;cursor:help}pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline)::after,pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline)::before{text-transform:none;font-size:.95em;line-height:1;user-select:none;pointer-events:none;position:absolute;display:none;opacity:0;-webkit-animation:tooltips-vert 300ms ease-out forwards;-moz-animation:tooltips-vert 300ms ease-out forwards;-o-animation:tooltips-vert 300ms ease-out forwards;animation:tooltips-vert 300ms ease-out forwards;left:50%;-webkit-transform:translate(-50%,-.5em);-moz-transform:translate(-50%,-.5em);-ms-transform:translate(-50%,-.5em);-o-transform:translate(-50%,-.5em);transform:translate(-50%,-.5em)}pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline)::before{content:'';border:8px solid transparent;z-index:1001;bottom:100%;border-bottom-width:0;border-top-color:#f8f8ff}pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline)::after{font-family:Helvetica,sans-serif;text-align:center;min-width:3em;max-width:21em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:1ch 1.5ch;border-radius:.3ch;-webkit-box-shadow:0 1em 2em -.5em rgba(0,0,0,.35);-moz-box-shadow:0 1em 2em -.5em rgba(0,0,0,.35);box-shadow:0 1em 2em -.5em rgba(0,0,0,.35);background:#f8f8ff;color:#000;z-index:1000;bottom:calc(100% + 8px)}pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline):hover::after,pre.ft-syntax-highlight[data-showTooltips=true i] code span:not(.newline):hover::before{display:block}pre.ft-syntax-highlight[data-showTooltips=true i] code span.comment::after{content:'comment'}pre.ft-syntax-highlight[data-showTooltips=true i] code span.value::after{content:'value'}pre.ft-syntax-highlight[data-ui-theme=beach i]{background-image:url();border:1px solid rgba(0,0,0,.125);border-radius:.25rem;color:#888;background-color:beige}pre.ft-syntax-highlight[data-ui-theme=beach i]::before{direction:ltr;font-weight:400;color:#fff;background:-webkit-linear-gradient(79deg,#6495ed 0%,#48d1cc 70%,#40e0d0);background:-moz-linear-gradient(79deg,#6495ed 0%,#48d1cc 70%,#40e0d0);background:-o-linear-gradient(79deg,#6495ed 0%,#48d1cc 70%,#40e0d0);background:linear-gradient(11deg,#6495ed 0%,#48d1cc 70%,#40e0d0)}pre.ft-syntax-highlight[data-ui-theme=beach i] code,pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i] code,pre.ft-syntax-highlight[data-ui-theme=burberry i] code,pre.ft-syntax-highlight[data-ui-theme=christmas i] code,pre.ft-syntax-highlight[data-ui-theme=halloween i] code{margin-top:0}pre.ft-syntax-highlight[data-ui-theme=beach i] code span.newline::before,pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i] code span.newline::before{color:#000}pre.ft-syntax-highlight[data-ui-theme=beach i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#6495ed}pre.ft-syntax-highlight[data-ui-theme=beach i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#6495ed;color:#f8f8ff}pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i]{background-color:#fff;background-image:url();border:1px solid rgba(0,0,0,.125);border-radius:.25rem;color:#888}pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i]::before{direction:ltr;font-weight:400;color:#000;background-color:#f7f7f9;border-bottom:1px solid rgba(0,0,0,.125)}pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i] code span.value{color:#696969}pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#333}pre.ft-syntax-highlight[data-ui-theme=bootstrap4 i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#333;color:#f8f8ff}pre.ft-syntax-highlight[data-ui-theme=burberry i]{background-color:beige;background-image:url();border:1px solid #797c73;border-radius:.25rem;color:#888}pre.ft-syntax-highlight[data-ui-theme=burberry i]::before{direction:ltr;font-weight:700;color:#fff;border-bottom:1px solid #797c73;background-color:#e9d4b9;background-image:-webkit-repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),-webkit-repeating-linear-gradient(315deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px);background-image:-moz-repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),-moz-repeating-linear-gradient(315deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px);background-image:-o-repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),-o-repeating-linear-gradient(315deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px);background-image:repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),repeating-linear-gradient(135deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px)}pre.ft-syntax-highlight[data-ui-theme=burberry i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=burberry i] code span.newline::before{color:#797c73}pre.ft-syntax-highlight[data-ui-theme=burberry i] code span.value{color:#696969}pre.ft-syntax-highlight[data-ui-theme=burberry i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#404f4f}pre.ft-syntax-highlight[data-ui-theme=burberry i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#404f4f;color:#f8f8ff}pre.ft-syntax-highlight[data-ui-theme=christmas i]{border:1px solid rgba(255,0,0,.3);border-radius:.25rem;color:#ddd;background:-webkit-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),-webkit-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,-webkit-linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,-webkit-linear-gradient(left,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background:-moz-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),-moz-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,-moz-linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,-moz-linear-gradient(left,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background:-o-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),-o-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,-o-linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,-o-linear-gradient(left,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background:radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,linear-gradient(90deg,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background-color:#2e8b57;background-size:100px 100px,100px 100px,50px 50px,50px 50px}pre.ft-syntax-highlight[data-ui-theme=christmas i]::before{direction:ltr;font-weight:700;color:#000;border-bottom:1px solid red;background:-webkit-repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px);background:-moz-repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px);background:-o-repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px);background:repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px)}pre.ft-syntax-highlight[data-ui-theme=christmas i] code span.comment{color:#c8c8c8;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=christmas i] code span.newline::before{color:#fff}pre.ft-syntax-highlight[data-ui-theme=christmas i] code span.value{color:#696969}pre.ft-syntax-highlight[data-ui-theme=christmas i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:tomato}pre.ft-syntax-highlight[data-ui-theme=christmas i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:tomato;color:#f8f8ff}pre.ft-syntax-highlight[data-ui-theme=halloween i]{background-color:#222;border:1px solid orange;border-radius:.25rem;color:#888;background-image:url("data:image/svg+xml,%3Csvg width='180' height='180' viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M82.42 180h-1.415L0 98.995v-2.827L6.167 90 0 83.833V81.004L81.005 0h2.827L90 6.167 96.167 0H98.996L180 81.005v2.827L173.833 90 180 96.167V98.996L98.995 180h-2.827L90 173.833 83.833 180H82.42zm0-1.414L1.413 97.58 8.994 90l-7.58-7.58L82.42 1.413 90 8.994l7.58-7.58 81.006 81.005-7.58 7.58 7.58 7.58-81.005 81.006-7.58-7.58-7.58 7.58zM175.196 0h-25.832c1.033 2.924 2.616 5.59 4.625 7.868C152.145 9.682 151 12.208 151 15c0 5.523 4.477 10 10 10 1.657 0 3 1.343 3 3v4h16V0h-4.803c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6s-6-2.686-6-6c0-1.093.292-2.117.803-3h10.394-13.685C161.18.938 161 1.948 161 3v4c-4.418 0-8 3.582-8 8s3.582 8 8 8c2.76 0 5 2.24 5 5v2h4v-4h2v4h4v-4h2v4h2V0h-4.803zm-15.783 0c-.27.954-.414 1.96-.414 3v2.2c-1.25.254-2.414.74-3.447 1.412-1.716-1.93-3.098-4.164-4.054-6.612h7.914zM180 17h-3l2.143-10H180v10zm-30.635 163c-.884-2.502-1.365-5.195-1.365-8 0-13.255 10.748-24 23.99-24H180v32h-30.635zm12.147 0c.5-1.416 1.345-2.67 2.434-3.66l-1.345-1.48c-1.498 1.364-2.62 3.136-3.186 5.14H151.5c-.97-2.48-1.5-5.177-1.5-8 0-12.15 9.84-22 22-22h8v30h-18.488zm13.685 0c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 148h8.01C21.26 148 32 158.742 32 172c0 2.805-.48 5.498-1.366 8H0v-32zm0 2h8c12.15 0 22 9.847 22 22 0 2.822-.53 5.52-1.5 8h-7.914c-.567-2.004-1.688-3.776-3.187-5.14l-1.346 1.48c1.09.99 1.933 2.244 2.434 3.66H0v-30zm15.197 30c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 32h16v-4c0-1.657 1.343-3 3-3 5.523 0 10-4.477 10-10 0-2.794-1.145-5.32-2.992-7.134C28.018 5.586 29.6 2.924 30.634 0H0v32zm0-2h2v-4h2v4h4v-4h2v4h4v-2c0-2.76 2.24-5 5-5 4.418 0 8-3.582 8-8s-3.582-8-8-8V3c0-1.052-.18-2.062-.512-3H0v30zM28.5 0c-.954 2.448-2.335 4.683-4.05 6.613-1.035-.672-2.2-1.16-3.45-1.413V3c0-1.04-.144-2.046-.414-3H28.5zM0 17h3L.857 7H0v10zM15.197 0c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6S4 6.314 4 3c0-1.093.292-2.117.803-3h10.394zM109 115c-1.657 0-3 1.343-3 3v4H74v-4c0-1.657-1.343-3-3-3-5.523 0-10-4.477-10-10 0-2.793 1.145-5.318 2.99-7.132C60.262 93.638 58 88.084 58 82c0-13.255 10.748-24 23.99-24h16.02C111.26 58 122 68.742 122 82c0 6.082-2.263 11.636-5.992 15.866C117.855 99.68 119 102.206 119 105c0 5.523-4.477 10-10 10zm0-2c-2.76 0-5 2.24-5 5v2h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-2c0-2.76-2.24-5-5-5-4.418 0-8-3.582-8-8s3.582-8 8-8v-4c0-2.64 1.136-5.013 2.946-6.66L72.6 84.86C70.39 86.874 69 89.775 69 93v2.2c-1.25.254-2.414.74-3.447 1.412C62.098 92.727 60 87.61 60 82c0-12.15 9.84-22 22-22h16c12.15 0 22 9.847 22 22 0 5.61-2.097 10.728-5.55 14.613-1.035-.672-2.2-1.16-3.45-1.413V93c0-3.226-1.39-6.127-3.6-8.14l-1.346 1.48C107.864 87.987 109 90.36 109 93v4c4.418 0 8 3.582 8 8s-3.582 8-8 8zM90.857 97L93 107h-6l2.143-10h1.714zM80 99c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6zm20 0c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6z' fill='%239C92AC' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E")}pre.ft-syntax-highlight[data-ui-theme=halloween i]::before{direction:ltr;font-weight:400;color:#fff;background-color:orange;border-bottom:1px solid orange}pre.ft-syntax-highlight[data-ui-theme=halloween i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=halloween i] code span.newline::before{color:orange}pre.ft-syntax-highlight[data-ui-theme=halloween i] code span.value{color:#696969}pre.ft-syntax-highlight[data-ui-theme=halloween i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:orange}pre.ft-syntax-highlight[data-ui-theme=halloween i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:orange;color:#fff}pre.ft-syntax-highlight[data-ui-theme=light i]{color:#000;font-weight:400;background-color:#f8f8ff;box-shadow:1px 0 2px #a9a9a9;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='304' height='304' viewBox='0 0 304 304' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2a5 5 0 1 0-2 0V82h64v-2h-62V21.9zm16 16a5 5 0 1 0-2 0V66h48v-2h-46V37.9zm-128 96a5 5 0 1 0-2 0V210h16v10.1a5 5 0 1 0 2 0V208h-16v-74.1zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9a5 5 0 1 0-2 0V144H53.9a5 5 0 1 0 0 2H98v-44.1zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9a5 5 0 1 0-2 0V64H80v64H69.9a5 5 0 1 0 0 2H82V66h32V37.9zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9a5 5 0 1 0-2 0V162h16v30h-16v66h48v46h2v-48h-48v-62h16v-34h-16v-10.1zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.172l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.513L175.586 80H224V21.9a5 5 0 1 1 2 0V82h-49.586L146 112.414V188.1zm16 32a5 5 0 1 1-2 0v-99.513L184.586 96H300.1a5.004 5.004 0 0 1 3.9-3.9v2.07a3.004 3.004 0 0 0 0 5.66v2.07a5.004 5.004 0 0 1-3.9-3.9H185.414L162 121.414V220.1zm-144-64a5 5 0 1 1-2 0v-3.513l48-48V48h32V0h2v50H66v55.413l-48 48v2.687zM50 53.9a5 5 0 1 0-2 0v42.686l-48 48V210h28.1a5 5 0 1 0 0-2H2v-62.586l48-48V53.9zm-16 16a5 5 0 1 0-2 0v18.686l-32 32v2.828l34-34V69.9zM12.1 32a5 5 0 1 1 0 2H9.414L0 43.414v-2.828L8.586 32H12.1zm265.8 18a5 5 0 1 1 0-2h18.686L304 40.586v2.828L297.414 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.413l16-16v2.827l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.586L40.586 194H21.9a5 5 0 1 1 0-2h19.513L66 216.586V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.598L56.598 162H37.9a5 5 0 1 1 0-2h19.502L98 200.598V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.586L48.586 178H21.9a5 5 0 1 1 0-2h27.513L82 208.586V258H53.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM34 39.793V0h-2v40.586L8.586 64H0v2h9.413L34 41.414v-1.62zM2 300.1V258h14v46h2v-48H0v46.17A3.004 3.004 0 0 1 3.83 304H5.9a5.004 5.004 0 0 0-3.9-3.9zM34 241v63h-2v-62H0v-2h34v1zM17 18h1V0h-2v16H0v2h17zm273-2V0h-2v18h16v-2h-14zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.002 5.002 0 0 1 6 97a5.002 5.002 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32a5 5 0 0 0-9.8 0h2.07a3.004 3.004 0 0 1 5.66 0h2.07zM5.9 0A5.002 5.002 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0a5 5 0 0 0 3.9 5.9V3.83A3.004 3.004 0 0 1 302.17 0h-2.07zm3.9 300.1a5.004 5.004 0 0 0-3.9 3.9h2.07a3.016 3.016 0 0 1 1.83-1.83v-2.07z' fill='%2345404b' fill-opacity='.05' fill-rule='evenodd'/%3E%3C/svg%3E")}pre.ft-syntax-highlight[data-ui-theme=light i] code span.newline::before{color:#000}pre.ft-syntax-highlight[data-ui-theme=light i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=light i] code span.value{color:#696969}pre.ft-syntax-highlight[data-ui-theme=light i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#333}pre.ft-syntax-highlight[data-ui-theme=light i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#333;color:#f8f8ff}pre.ft-syntax-highlight[data-ui-theme=macosx i]{background-image:url();border-radius:.3rem;background:rgba(0,0,0,.8);padding:11px 0 0}pre.ft-syntax-highlight[data-ui-theme=macosx i]::before{direction:ltr;text-indent:0;text-align:center;font-weight:400;color:#554a4a;background:-webkit-gradient(linear,left bottom,left top,from(#d3d3d3),to(#ebebeb));background:-webkit-linear-gradient(bottom,#d3d3d3,#ebebeb);background:-moz-linear-gradient(bottom,#d3d3d3,#ebebeb);background:-o-linear-gradient(bottom,#d3d3d3,#ebebeb);background:linear-gradient(to top,#d3d3d3,#ebebeb);padding:5px 0;border-radius:.25rem}pre.ft-syntax-highlight[data-ui-theme=macosx i]::after{content:' ';position:absolute;top:10px;left:10px;background:#f95151;border-radius:100%;width:13px;z-index:5;box-shadow:20px 0 0 0 #ffb400,40px 0 0 0 #96d46f}pre.ft-syntax-highlight[data-ui-theme=macosx i] code{margin-top:0;font-family:Courier,monospace;border:10px solid #d3d3d3;border-radius:.25rem}pre.ft-syntax-highlight[data-showTooltips=true i][data-ui-theme=macosx i] code span:not(.newline)::after{font-family:Courier,monospace}pre.ft-syntax-highlight[data-ui-theme=midnight i]{border:1px solid #b299e6;border-radius:.25rem;color:#888;background-color:#000;background-image:-webkit-radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),-webkit-radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),-webkit-radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),-webkit-radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-image:-moz-radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),-moz-radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),-moz-radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),-moz-radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-image:-o-radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),-o-radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),-o-radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),-o-radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-image:radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-size:550px 550px,350px 350px,250px 250px,150px 150px;background-position:0 -80px,40px -20px,130px 200px,70px 20px}pre.ft-syntax-highlight[data-ui-theme=midnight i]::before{direction:ltr;font-weight:400;color:#fff;background-color:#b299e6;border-bottom:1px solid #b299e6}pre.ft-syntax-highlight[data-ui-theme=midnight i] code,pre.ft-syntax-highlight[data-ui-theme=nightvision i] code{margin-top:0}pre.ft-syntax-highlight[data-ui-theme=midnight i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=midnight i] code span.newline::before{color:#d8bfd8}pre.ft-syntax-highlight[data-ui-theme=midnight i] code span.value{color:#696969}pre.ft-syntax-highlight[data-ui-theme=midnight i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#b299e6}pre.ft-syntax-highlight[data-ui-theme=midnight i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#b299e6;color:snow}pre.ft-syntax-highlight[data-ui-theme=nightvision i]{background-image:url();border-radius:.25rem;color:snow;background:#2c3e52}pre.ft-syntax-highlight[data-ui-theme=nightvision i]::before{direction:ltr;font-weight:400;color:#fff;background:#1abd9e}pre.ft-syntax-highlight[data-ui-theme=nightvision i] code span.newline::before{color:#1abd9e}pre.ft-syntax-highlight[data-ui-theme=nightvision i] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-ui-theme=nightvision i] code::-webkit-scrollbar-track{width:14px;height:14px;border-radius:0;background-color:#1abd9f2c}pre.ft-syntax-highlight[data-ui-theme=nightvision i] code::-webkit-scrollbar-thumb{border-radius:0;background-color:#1abd9e;box-shadow:unset}pre.ft-syntax-highlight[data-ui-theme=nightvision i] code::-webkit-resizer,pre.ft-syntax-highlight[data-ui-theme=nightvision i] code::-webkit-scrollbar-corner{background-color:#1abd9f2c}pre.ft-syntax-highlight[data-ui-theme=simple i]{color:#2f4f4f;background-color:#ebebeb;border-radius:5px;box-shadow:1px 0 2px #a9a9a9;background-image:url()}pre.ft-syntax-highlight[data-ui-theme=simple i] code span.newline::before{color:peru}pre.ft-syntax-highlight[data-ui-theme=simple i] code span.comment{color:#6e6e6e!important;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=simple i] code span.value{color:#696969!important}pre.ft-syntax-highlight[data-ui-theme=simple i][data-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#333}pre.ft-syntax-highlight[data-ui-theme=simple i][data-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#333;color:#f8f8ff}pre.ft-syntax-highlight[data-ui-theme=win95 i]{background-image:url();background:silver;color:#000;border:4px solid silver}pre.ft-syntax-highlight[data-ui-theme=win95 i]::before{content:'🗁 ' attr(data-syntax);direction:ltr;font-weight:400;color:#fff;background:navy;font-family:Times,sans-serif;font-size:.89rem;letter-spacing:0}pre.ft-syntax-highlight[data-ui-theme=win95 i]::after{content:'🞪';position:absolute;top:9px;right:5px;color:#000;font-size:.9rem;padding:0 4px}pre.ft-syntax-highlight[data-ui-theme=win95 i] code{margin-top:0;font-family:Times,sans-serif;padding-left:35px}pre.ft-syntax-highlight[data-ui-theme=win95 i] code span.newline::before{color:#000}pre.ft-syntax-highlight[data-ui-theme=win95 i] code span.comment{color:#6e6e6e!important;font-weight:200}pre.ft-syntax-highlight[data-ui-theme=win95 i] code span.value{color:#696969!important}pre.ft-syntax-highlight[data-showTooltips=true i][data-ui-theme=win95 i] code span:not(.newline)::after{font-family:Times,sans-serif}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-track{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAFElEQVQIW2M4fPz0////GYAYyAIASnoKpV3w4kgAAAAASUVORK5CYII=);image-rendering:pixelated}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar{width:18px;height:18px;border-radius:0;background-color:rgba(255,255,255,.6)}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-corner{display:block;background-color:silver}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-button,pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-ui-theme=win95 i]::after{border-radius:0;background-color:silver;border:1px solid #000;border-top:1px solid silver;border-left:1px solid silver;box-shadow:inset 1px 1px 0 0 #fff,inset -1px -1px 0 0 #868a8e;background-position:center center;background-repeat:no-repeat;image-rendering:pixelated}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-button:vertical:decrement{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGklEQVR4AWMYxuA/SYphmETFhDX9x4mHGQAAcL4P8dQiMq8AAAAASUVORK5CYII=)}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-button:vertical:increment{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAF0lEQVQY02NgoBf4jwJxSOHQhcNAOgMAWWAP8Rv2U3UAAAAASUVORK5CYII=)}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-button:horizontal:decrement{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAHklEQVQY02NgoBT8xyX8H5fwf1zCpOjAYwceV1EEAAO2D/HsQ4vsAAAAAElFTkSuQmCC)}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-button:horizontal:increment{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAHUlEQVQY02NgIB/8xy3xH7fEf9wS/0nUQZqrKAYAK44P8ZRmzLQAAAAASUVORK5CYII=)}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-button:active{background-position:3px 3px}pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-resizer,pre.ft-syntax-highlight[data-ui-theme=win95 i] code::-webkit-scrollbar-corner{background-color:#d3d3d3;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAN0lEQVR4Ae3MgQUAMBRDwU5fFF05lb/CARTBw2Ulof0DxPtcwp3hNuEYnjbcEW4TjuFpwx3h9gMWGgZ2Y/PT2gAAAABJRU5ErkJggg==);background-position:bottom right;background-repeat:no-repeat;image-rendering:pixelated}[class*=ft-syntax-highlight]>*>pre{background-color:transparent;box-shadow:none;background-image:url();color:inherit}pre.ft-syntax-highlight code span.comment{color:rgba(240,240,240,.3);font-weight:200}pre.ft-syntax-highlight code span.url{text-decoration:underline}pre.ft-syntax-highlight code span.value{color:#b4b4b4;font-weight:300}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.boolean,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-constant,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-enum,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-structure,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.null,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.unit{color:tomato}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-function,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-udf{color:#4f9fcf}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-class,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-sub,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.variable{color:#0b9c5e}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.object,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.property{color:inherit}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.keyword{color:#70b5db}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-namespace,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.identifier-native{color:#2f6f9f}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.operand{color:#70b5db}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.typecast{color:#0000cd}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.url,pre.ft-syntax-highlight[data-syntax-theme=bootstrap i] code span.value{color:#ff4500}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.boolean,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-constant,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-enum,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-structure,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.null,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.unit{color:#db7970}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-function,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-udf{color:#ceafce}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-class,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-sub{color:#93db70}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.url{color:#c9db70}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.object,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.property{color:#eee8aa}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.keyword{color:#70b5db}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-namespace,pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.identifier-native{color:#db7093}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.operand{color:#70b5db}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.typecast{color:violet}pre.ft-syntax-highlight[data-syntax-theme=midnight i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.boolean,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-constant,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-enum,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-structure,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.null,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.unit{color:#daa520}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-function,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-udf{color:#3b94d9}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-class,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-sub{color:#f8da7b}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-native{color:#20b2aa}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.object,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.property{color:tomato}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.identifier-namespace,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.keyword{color:#d979c4}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.operand,pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.url{color:#48d1cc}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.typecast{color:violet}pre.ft-syntax-highlight[data-syntax-theme=one-dark i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=html i] code span.identifier,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.boolean,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-constant,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-enum,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-structure,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.null,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.unit{color:orange}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-function,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-udf{color:#16c07b}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-class,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-sub{color:#6a5acd}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-native,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.url{color:#6bbcff}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.object,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.property{color:tan}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.identifier-namespace,pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.keyword{color:#de6f5b}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.operand{color:#48d1cc}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.typecast{color:violet}pre.ft-syntax-highlight[data-syntax-theme=one-light i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-syntax-theme=simple i] *{color:#2f4f4f!important;font-weight:400}pre.ft-syntax-highlight[data-syntax-theme=simple i] code span.newline::before{color:#2f4f4f!important}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.comment{color:#4e9c3a;font-weight:400}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.value{color:#f4a460;font-weight:200}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.boolean,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-namespace,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.keyword,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.null{color:#3c8dcc}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier{color:#5aaffc}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-native{color:#cc7b3c}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-class,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-structure,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-sub{color:#3cbea1}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-constant,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.identifier-enum,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.unit{color:#b8d288}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.operand{color:#70b5db}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.url{color:#3c8dcc;text-decoration:underline}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.typecast{color:#8a2be2}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-syntax=html i][data-showTooltips=true i] code span.identifier::after{content:'selector'}pre.ft-syntax-highlight[data-syntax=html i][data-showTooltips=true i] code span.identifier-native::after{content:'selector-native'}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=html i] code span.identifier-native{color:tomato}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.at-rule::after{content:"at-rule"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.identifier::after{content:"selector"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.identifier-function::after{content:"function"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.identifier-native::after{content:"selector-native"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.operand::after{content:"operand"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.property::after{content:"property"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.pseudo::after{content:"pseudo"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.unit::after{content:"unit"}pre.ft-syntax-highlight[data-syntax=css i][data-showTooltips=true i] code span.variable::after{content:"variable"}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i][data-syntax=css i] code span.at-rule{color:#0b9c5e}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.at-rule{color:violet}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.identifier{color:orange}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.identifier-function,pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.property{color:#96cbfe}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.identifier-native{color:tomato}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.pseudo{color:#fcbb7e}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=css i] code span.variable{color:tomato}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=css i] code span.at-rule{color:#ff6090}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=css i] code span.identifier-function{color:tan}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=css i] code span.pseudo{color:peru}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=css i] code span.variable{color:tomato}pre.ft-syntax-highlight[data-syntax-theme=midnight i][data-syntax=css i] code span.at-rule{color:#70b5db}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i][data-syntax=css i] code span.at-rule,pre.ft-syntax-highlight[data-syntax-theme=vbgreen i][data-syntax=css i] code span.identifier-function{color:#9370db}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i][data-syntax=css i] code span.variable{color:#ff4500}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.identifier-class::after{content:'indentifier-class'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.identifier-constant::after{content:'indentifier-constant'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-syntax=js i][data-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.identifier-class::after{content:'indentifier-class'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.identifier-constant::after{content:'indentifier-constant'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-syntax=jquery i][data-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.identifier-class::after{content:'indentifier-class'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.identifier-constant::after{content:'indentifier-constant'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-syntax=php i][data-showTooltips=true i] code span.typecast::after{content:'typecast'}pre.ft-syntax-highlight[data-syntax=php i][data-syntax-theme=one-dark i] code span.identifier{color:tomato}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.identifier-class::after{content:'identifier-class'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.identifier-constant::after{content:'identifier-constant'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-syntax=python i][data-showTooltips=true i] code span.variable::after{content:'variable'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-class::after{content:'identifier-class'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-constant::after{content:'identifier-constant'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-enum::after{content:'identifier-enum'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-function::after{content:'identifier-function'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-namespace::after{content:'identifier-namespace'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-structure::after{content:'identifier-structure'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.identifier-sub::after{content:'identifier-sub'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.typecast::after{content:'typecast'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-syntax=vb i][data-showTooltips=true i] code span.variable::after{content:'variable'}pre.ft-syntax-highlight[data-syntax=vb i][data-syntax-theme=bootstrap i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-syntax=vb i][data-syntax-theme=one-dark i] code span.identifier-sub{color:#3b94d9}pre.ft-syntax-highlight[data-syntax=vb i][data-syntax-theme=one-light i] code span.keyword{color:#6bbcff}pre.ft-syntax-highlight[data-syntax=xml i][data-showTooltips=true i] code span.attribute::after{content:"attribute"}pre.ft-syntax-highlight[data-syntax=xml i][data-showTooltips=true i] code span.identifier::after{content:"element"}pre.ft-syntax-highlight[data-syntax=xml i][data-showTooltips=true i] code span.identifier-namespace::after{content:"namespace"}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i][data-syntax=xml i] code span.attribute{color:#4f9fcf}pre.ft-syntax-highlight[data-syntax-theme=bootstrap i][data-syntax=xml i] code span.identifier{color:#2f6f9f}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=xml i] code span.attribute{color:orange}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=xml i] code span.identifier{color:tomato}pre.ft-syntax-highlight[data-syntax-theme=one-dark i][data-syntax=xml i] code span.identifier-namespace{color:coral}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=xml i] code span.attribute{color:#16c07b}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=xml i] code span.identifier{color:#6bbcff}pre.ft-syntax-highlight[data-syntax-theme=one-light i][data-syntax=xml i] code span.identifier-namespace{color:#8ac1ff}pre.ft-syntax-highlight[data-syntax-theme=midnight i][data-syntax=xml i] code span.attribute{color:#d8bfd8}pre.ft-syntax-highlight[data-syntax-theme=midnight i][data-syntax=xml i] code span.identifier{color:#db7093}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i][data-syntax=xml i] code span.attribute{color:#085a99}pre.ft-syntax-highlight[data-syntax-theme=vbgreen i][data-syntax=xml i] code span.identifier{color:#3c8dcc} \ No newline at end of file +@import url(https://fonts.googleapis.com/css?family=Source+Code+Pro:200,300,400);@-webkit-keyframes tooltips-vert{to{opacity:.9;-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}}@-moz-keyframes tooltips-vert{to{opacity:.9;-moz-transform:translate(-50%,0);transform:translate(-50%,0)}}@-o-keyframes tooltips-vert{to{opacity:.9;-o-transform:translate(-50%,0);transform:translate(-50%,0)}}@keyframes tooltips-vert{to{opacity:.9;-webkit-transform:translate(-50%,0);-moz-transform:translate(-50%,0);-o-transform:translate(-50%,0);transform:translate(-50%,0)}}pre.ft-syntax-highlight{display:block;position:relative;padding:30px 0 0;font-size:.85rem;letter-spacing:.5px;color:#d3d3d3;background-color:#2d2832;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='304' height='304' viewBox='0 0 304 304' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-206-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2a5 5 0 1 0-2 0V82h64v-2h-62V21.9zm16 16a5 5 0 1 0-2 0V66h48v-2h-46V37.9zm-128 96a5 5 0 1 0-2 0V210h16v10.1a5 5 0 1 0 2 0V208h-16v-74.1zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9a5 5 0 1 0-2 0V144H53.9a5 5 0 1 0 0 2H98v-44.1zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9a5 5 0 1 0-2 0V64H80v64H69.9a5 5 0 1 0 0 2H82V66h32V37.9zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9a5 5 0 1 0-2 0V162h16v30h-16v66h48v46h2v-48h-48v-62h16v-34h-16v-10.1zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.172l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.513L175.586 80H224V21.9a5 5 0 1 1 2 0V82h-49.586L146 112.414V188.1zm16 32a5 5 0 1 1-2 0v-99.513L184.586 96H300.1a5.004 5.004 0 0 1 3.9-3.9v2.07a3.004 3.004 0 0 0 0 5.66v2.07a5.004 5.004 0 0 1-3.9-3.9H185.414L162 121.414V220.1zm-144-64a5 5 0 1 1-2 0v-3.513l48-48V48h32V0h2v50H66v55.413l-48 48v2.687zM50 53.9a5 5 0 1 0-2 0v42.686l-48 48V210h28.1a5 5 0 1 0 0-2H2v-62.586l48-48V53.9zm-16 16a5 5 0 1 0-2 0v18.686l-32 32v2.828l34-34V69.9zM12.1 32a5 5 0 1 1 0 2H9.414L0 43.414v-2.828L8.586 32H12.1zm265.8 18a5 5 0 1 1 0-2h18.686L304 40.586v2.828L297.414 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.413l16-16v2.827l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.586L40.586 194H21.9a5 5 0 1 1 0-2h19.513L66 216.586V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.598L56.598 162H37.9a5 5 0 1 1 0-2h19.502L98 200.598V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.586L48.586 178H21.9a5 5 0 1 1 0-2h27.513L82 208.586V258H53.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM34 39.793V0h-2v40.586L8.586 64H0v2h9.413L34 41.414v-1.62zM2 300.1V258h14v46h2v-48H0v46.17A3.004 3.004 0 0 1 3.83 304H5.9a5.004 5.004 0 0 0-3.9-3.9zM34 241v63h-2v-62H0v-2h34v1zM17 18h1V0h-2v16H0v2h17zm273-2V0h-2v18h16v-2h-14zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.002 5.002 0 0 1 6 97a5.002 5.002 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32a5 5 0 0 0-9.8 0h2.07a3.004 3.004 0 0 1 5.66 0h2.07zM5.9 0A5.002 5.002 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0a5 5 0 0 0 3.9 5.9V3.83A3.004 3.004 0 0 1 302.17 0h-2.07zm3.9 300.1a5.004 5.004 0 0 0-3.9 3.9h2.07a3.016 3.016 0 0 1 1.83-1.83v-2.07z' fill='%2345404b' fill-opacity='.1' fill-rule='evenodd'/%3E%3C/svg%3E")}pre.ft-syntax-highlight::before{position:absolute;top:0;left:0;width:100%;padding:10px 0;text-indent:25px;font-weight:700;font-size:1.2rem;text-transform:uppercase;color:#888;letter-spacing:.8px;content:attr(data-bs-syntax);direction:rtl}pre.ft-syntax-highlight code{font-family:'Source Code Pro',monospace;counter-reset:line -1;display:block;margin:-25px 10px -28px 10px;padding:0 10px 10px 0;max-height:400px;overflow:auto}pre.ft-syntax-highlight code span.newline::before{position:relative;right:20px;color:#d3d3d3;counter-increment:line;content:counter(line);font-weight:200}pre.ft-syntax-highlight code span.newline:nth-of-type(n+11)::before{position:relative;right:28px}pre.ft-syntax-highlight code span.newline:nth-of-type(n+101)::before{position:relative;right:36px}@media all and (max-width:550px){pre.ft-syntax-highlight{font-size:calc(9px + .8vw)}}@media all and (max-width:225px){pre.ft-syntax-highlight[data-bs-ui-theme=macosx i]::before{text-align:left;text-indent:55%}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i]::after{display:none}}pre.ft-syntax-highlight code::-webkit-scrollbar-track{background-color:transparent}pre.ft-syntax-highlight code::-webkit-scrollbar{width:10px;height:10px;border-radius:10px;background-color:rgba(255,255,255,.4)}pre.ft-syntax-highlight code::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:rgba(255,255,255,.5)}pre.ft-syntax-highlight code::-webkit-scrollbar-corner{display:none}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-bs-ui-theme=burberry] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-bs-ui-theme=light] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-bs-ui-theme=simple] code::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.4)}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-bs-ui-theme=burberry] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-bs-ui-theme=light] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-bs-ui-theme=simple] code::-webkit-scrollbar{background-color:rgba(0,0,0,.4)}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline):not(.url){position:relative;cursor:help}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline)::after,pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline)::before{text-transform:none;font-size:.95em;line-height:1;user-select:none;pointer-events:none;position:absolute;display:none;opacity:0;-webkit-animation:tooltips-vert 300ms ease-out forwards;-moz-animation:tooltips-vert 300ms ease-out forwards;-o-animation:tooltips-vert 300ms ease-out forwards;animation:tooltips-vert 300ms ease-out forwards;left:50%;-webkit-transform:translate(-50%,-.5em);-moz-transform:translate(-50%,-.5em);-ms-transform:translate(-50%,-.5em);-o-transform:translate(-50%,-.5em);transform:translate(-50%,-.5em)}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline)::before{content:'';border:8px solid transparent;z-index:1001;bottom:100%;border-bottom-width:0;border-top-color:#f8f8ff}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline)::after{font-family:Helvetica,sans-serif;text-align:center;min-width:3em;max-width:21em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:1ch 1.5ch;border-radius:.3ch;-webkit-box-shadow:0 1em 2em -.5em rgba(0,0,0,.35);-moz-box-shadow:0 1em 2em -.5em rgba(0,0,0,.35);box-shadow:0 1em 2em -.5em rgba(0,0,0,.35);background:#f8f8ff;color:#000;z-index:1000;bottom:calc(100% + 8px)}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline):hover::after,pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span:not(.newline):hover::before{display:block}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span.comment::after{content:'comment'}pre.ft-syntax-highlight[data-bs-showTooltips=true i] code span.value::after{content:'value'}pre.ft-syntax-highlight[data-bs-ui-theme=beach i]{background-image:url();border:1px solid rgba(0,0,0,.125);border-radius:.25rem;color:#888;background-color:beige}pre.ft-syntax-highlight[data-bs-ui-theme=beach i]::before{direction:ltr;font-weight:400;color:#fff;background:-webkit-linear-gradient(79deg,#6495ed 0%,#48d1cc 70%,#40e0d0);background:-moz-linear-gradient(79deg,#6495ed 0%,#48d1cc 70%,#40e0d0);background:-o-linear-gradient(79deg,#6495ed 0%,#48d1cc 70%,#40e0d0);background:linear-gradient(11deg,#6495ed 0%,#48d1cc 70%,#40e0d0)}pre.ft-syntax-highlight[data-bs-ui-theme=beach i] code,pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i] code,pre.ft-syntax-highlight[data-bs-ui-theme=burberry i] code,pre.ft-syntax-highlight[data-bs-ui-theme=christmas i] code,pre.ft-syntax-highlight[data-bs-ui-theme=halloween i] code{margin-top:0}pre.ft-syntax-highlight[data-bs-ui-theme=beach i] code span.newline::before,pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i] code span.newline::before{color:#000}pre.ft-syntax-highlight[data-bs-ui-theme=beach i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#6495ed}pre.ft-syntax-highlight[data-bs-ui-theme=beach i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#6495ed;color:#f8f8ff}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i]{background-color:#fff;background-image:url();border:1px solid rgba(0,0,0,.125);border-radius:.25rem;color:#888}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i]::before{direction:ltr;font-weight:400;color:#000;background-color:#f7f7f9;border-bottom:1px solid rgba(0,0,0,.125)}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i] code span.value{color:#696969}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#333}pre.ft-syntax-highlight[data-bs-ui-theme=bootstrap4 i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#333;color:#f8f8ff}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i]{background-color:beige;background-image:url();border:1px solid #797c73;border-radius:.25rem;color:#888}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i]::before{direction:ltr;font-weight:700;color:#fff;border-bottom:1px solid #797c73;background-color:#e9d4b9;background-image:-webkit-repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),-webkit-repeating-linear-gradient(315deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px);background-image:-moz-repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),-moz-repeating-linear-gradient(315deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px);background-image:-o-repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),-o-repeating-linear-gradient(315deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px);background-image:repeating-linear-gradient(45deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 120px,rgba(11,36,45,.5) 120px,rgba(11,36,45,.5) 140px),repeating-linear-gradient(135deg,transparent 5px,rgba(11,36,45,.5) 5px,rgba(11,36,45,.5) 10px,rgba(211,119,111,0) 10px,rgba(211,119,111,0) 35px,rgba(211,119,111,.5) 35px,rgba(211,119,111,.5) 40px,rgba(11,36,45,.5) 40px,rgba(11,36,45,.5) 50px,rgba(11,36,45,0) 50px,rgba(11,36,45,0) 60px,rgba(211,119,111,.5) 60px,rgba(211,119,111,.5) 70px,rgba(247,179,85,.5) 70px,rgba(247,179,85,.5) 80px,rgba(247,179,85,0) 80px,rgba(247,179,85,0) 90px,rgba(211,119,111,.5) 90px,rgba(211,119,111,.5) 110px,rgba(211,119,111,0) 110px,rgba(211,119,111,0) 140px,rgba(11,36,45,.5) 140px,rgba(11,36,45,.5) 160px)}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i] code span.newline::before{color:#797c73}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i] code span.value{color:#696969}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#404f4f}pre.ft-syntax-highlight[data-bs-ui-theme=burberry i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#404f4f;color:#f8f8ff}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i]{border:1px solid rgba(255,0,0,.3);border-radius:.25rem;color:#ddd;background:-webkit-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),-webkit-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,-webkit-linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,-webkit-linear-gradient(left,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background:-moz-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),-moz-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,-moz-linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,-moz-linear-gradient(left,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background:-o-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),-o-radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,-o-linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,-o-linear-gradient(left,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background:radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent),radial-gradient(circle,transparent 20%,#2e8b57 20%,#2e8b57 80%,transparent 80%,transparent) 50px 50px,linear-gradient(rgba(255,250,250,.035) 8px,transparent 8px) 0 -4px,linear-gradient(90deg,rgba(255,250,250,.035) 8px,transparent 8px) -4px 0;background-color:#2e8b57;background-size:100px 100px,100px 100px,50px 50px,50px 50px}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i]::before{direction:ltr;font-weight:700;color:#000;border-bottom:1px solid red;background:-webkit-repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px);background:-moz-repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px);background:-o-repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px);background:repeating-linear-gradient(45deg,#f4f4d7,#f4f4d7 10px,red 10px,#f4f4d7 15px,red 20px,#f4f4d7 20px,#f4f4d7 40px,red 40px,red 60px,#f4f4d7 60px,#f4f4d7 90px,red 90px,red 110px)}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i] code span.comment{color:#c8c8c8;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i] code span.newline::before{color:#fff}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i] code span.value{color:#696969}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:tomato}pre.ft-syntax-highlight[data-bs-ui-theme=christmas i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:tomato;color:#f8f8ff}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i]{background-color:#222;border:1px solid orange;border-radius:.25rem;color:#888;background-image:url("data:image/svg+xml,%3Csvg width='180' height='180' viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M82.42 180h-1.415L0 98.995v-2.827L6.167 90 0 83.833V81.004L81.005 0h2.827L90 6.167 96.167 0H98.996L180 81.005v2.827L173.833 90 180 96.167V98.996L98.995 180h-2.827L90 173.833 83.833 180H82.42zm0-1.414L1.413 97.58 8.994 90l-7.58-7.58L82.42 1.413 90 8.994l7.58-7.58 81.006 81.005-7.58 7.58 7.58 7.58-81.005 81.006-7.58-7.58-7.58 7.58zM175.196 0h-25.832c1.033 2.924 2.616 5.59 4.625 7.868C152.145 9.682 151 12.208 151 15c0 5.523 4.477 10 10 10 1.657 0 3 1.343 3 3v4h16V0h-4.803c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6s-6-2.686-6-6c0-1.093.292-2.117.803-3h10.394-13.685C161.18.938 161 1.948 161 3v4c-4.418 0-8 3.582-8 8s3.582 8 8 8c2.76 0 5 2.24 5 5v2h4v-4h2v4h4v-4h2v4h2V0h-4.803zm-15.783 0c-.27.954-.414 1.96-.414 3v2.2c-1.25.254-2.414.74-3.447 1.412-1.716-1.93-3.098-4.164-4.054-6.612h7.914zM180 17h-3l2.143-10H180v10zm-30.635 163c-.884-2.502-1.365-5.195-1.365-8 0-13.255 10.748-24 23.99-24H180v32h-30.635zm12.147 0c.5-1.416 1.345-2.67 2.434-3.66l-1.345-1.48c-1.498 1.364-2.62 3.136-3.186 5.14H151.5c-.97-2.48-1.5-5.177-1.5-8 0-12.15 9.84-22 22-22h8v30h-18.488zm13.685 0c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 148h8.01C21.26 148 32 158.742 32 172c0 2.805-.48 5.498-1.366 8H0v-32zm0 2h8c12.15 0 22 9.847 22 22 0 2.822-.53 5.52-1.5 8h-7.914c-.567-2.004-1.688-3.776-3.187-5.14l-1.346 1.48c1.09.99 1.933 2.244 2.434 3.66H0v-30zm15.197 30c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 32h16v-4c0-1.657 1.343-3 3-3 5.523 0 10-4.477 10-10 0-2.794-1.145-5.32-2.992-7.134C28.018 5.586 29.6 2.924 30.634 0H0v32zm0-2h2v-4h2v4h4v-4h2v4h4v-2c0-2.76 2.24-5 5-5 4.418 0 8-3.582 8-8s-3.582-8-8-8V3c0-1.052-.18-2.062-.512-3H0v30zM28.5 0c-.954 2.448-2.335 4.683-4.05 6.613-1.035-.672-2.2-1.16-3.45-1.413V3c0-1.04-.144-2.046-.414-3H28.5zM0 17h3L.857 7H0v10zM15.197 0c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6S4 6.314 4 3c0-1.093.292-2.117.803-3h10.394zM109 115c-1.657 0-3 1.343-3 3v4H74v-4c0-1.657-1.343-3-3-3-5.523 0-10-4.477-10-10 0-2.793 1.145-5.318 2.99-7.132C60.262 93.638 58 88.084 58 82c0-13.255 10.748-24 23.99-24h16.02C111.26 58 122 68.742 122 82c0 6.082-2.263 11.636-5.992 15.866C117.855 99.68 119 102.206 119 105c0 5.523-4.477 10-10 10zm0-2c-2.76 0-5 2.24-5 5v2h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-2c0-2.76-2.24-5-5-5-4.418 0-8-3.582-8-8s3.582-8 8-8v-4c0-2.64 1.136-5.013 2.946-6.66L72.6 84.86C70.39 86.874 69 89.775 69 93v2.2c-1.25.254-2.414.74-3.447 1.412C62.098 92.727 60 87.61 60 82c0-12.15 9.84-22 22-22h16c12.15 0 22 9.847 22 22 0 5.61-2.097 10.728-5.55 14.613-1.035-.672-2.2-1.16-3.45-1.413V93c0-3.226-1.39-6.127-3.6-8.14l-1.346 1.48C107.864 87.987 109 90.36 109 93v4c4.418 0 8 3.582 8 8s-3.582 8-8 8zM90.857 97L93 107h-6l2.143-10h1.714zM80 99c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6zm20 0c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6z' fill='%239C92AC' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E")}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i]::before{direction:ltr;font-weight:400;color:#fff;background-color:orange;border-bottom:1px solid orange}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i] code span.newline::before{color:orange}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i] code span.value{color:#696969}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:orange}pre.ft-syntax-highlight[data-bs-ui-theme=halloween i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:orange;color:#fff}pre.ft-syntax-highlight[data-bs-ui-theme=light i]{color:#000;font-weight:400;background-color:#f8f8ff;box-shadow:1px 0 2px #a9a9a9;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='304' height='304' viewBox='0 0 304 304' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2a5 5 0 1 0-2 0V82h64v-2h-62V21.9zm16 16a5 5 0 1 0-2 0V66h48v-2h-46V37.9zm-128 96a5 5 0 1 0-2 0V210h16v10.1a5 5 0 1 0 2 0V208h-16v-74.1zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9a5 5 0 1 0-2 0V144H53.9a5 5 0 1 0 0 2H98v-44.1zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9a5 5 0 1 0-2 0V64H80v64H69.9a5 5 0 1 0 0 2H82V66h32V37.9zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9a5 5 0 1 0-2 0V162h16v30h-16v66h48v46h2v-48h-48v-62h16v-34h-16v-10.1zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.172l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.513L175.586 80H224V21.9a5 5 0 1 1 2 0V82h-49.586L146 112.414V188.1zm16 32a5 5 0 1 1-2 0v-99.513L184.586 96H300.1a5.004 5.004 0 0 1 3.9-3.9v2.07a3.004 3.004 0 0 0 0 5.66v2.07a5.004 5.004 0 0 1-3.9-3.9H185.414L162 121.414V220.1zm-144-64a5 5 0 1 1-2 0v-3.513l48-48V48h32V0h2v50H66v55.413l-48 48v2.687zM50 53.9a5 5 0 1 0-2 0v42.686l-48 48V210h28.1a5 5 0 1 0 0-2H2v-62.586l48-48V53.9zm-16 16a5 5 0 1 0-2 0v18.686l-32 32v2.828l34-34V69.9zM12.1 32a5 5 0 1 1 0 2H9.414L0 43.414v-2.828L8.586 32H12.1zm265.8 18a5 5 0 1 1 0-2h18.686L304 40.586v2.828L297.414 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.413l16-16v2.827l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.586L40.586 194H21.9a5 5 0 1 1 0-2h19.513L66 216.586V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.598L56.598 162H37.9a5 5 0 1 1 0-2h19.502L98 200.598V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.586L48.586 178H21.9a5 5 0 1 1 0-2h27.513L82 208.586V258H53.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM34 39.793V0h-2v40.586L8.586 64H0v2h9.413L34 41.414v-1.62zM2 300.1V258h14v46h2v-48H0v46.17A3.004 3.004 0 0 1 3.83 304H5.9a5.004 5.004 0 0 0-3.9-3.9zM34 241v63h-2v-62H0v-2h34v1zM17 18h1V0h-2v16H0v2h17zm273-2V0h-2v18h16v-2h-14zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.002 5.002 0 0 1 6 97a5.002 5.002 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32a5 5 0 0 0-9.8 0h2.07a3.004 3.004 0 0 1 5.66 0h2.07zM5.9 0A5.002 5.002 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0a5 5 0 0 0 3.9 5.9V3.83A3.004 3.004 0 0 1 302.17 0h-2.07zm3.9 300.1a5.004 5.004 0 0 0-3.9 3.9h2.07a3.016 3.016 0 0 1 1.83-1.83v-2.07z' fill='%2345404b' fill-opacity='.05' fill-rule='evenodd'/%3E%3C/svg%3E")}pre.ft-syntax-highlight[data-bs-ui-theme=light i] code span.newline::before{color:#000}pre.ft-syntax-highlight[data-bs-ui-theme=light i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=light i] code span.value{color:#696969}pre.ft-syntax-highlight[data-bs-ui-theme=light i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#333}pre.ft-syntax-highlight[data-bs-ui-theme=light i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#333;color:#f8f8ff}pre.ft-syntax-highlight[data-bs-ui-theme=macosx i]{background-image:url();border-radius:.3rem;background:rgba(0,0,0,.8);padding:11px 0 0}pre.ft-syntax-highlight[data-bs-ui-theme=macosx i]::before{direction:ltr;text-indent:0;text-align:center;font-weight:400;color:#554a4a;background:-webkit-gradient(linear,left bottom,left top,from(#d3d3d3),to(#ebebeb));background:-webkit-linear-gradient(bottom,#d3d3d3,#ebebeb);background:-moz-linear-gradient(bottom,#d3d3d3,#ebebeb);background:-o-linear-gradient(bottom,#d3d3d3,#ebebeb);background:linear-gradient(to top,#d3d3d3,#ebebeb);padding:5px 0;border-radius:.25rem}pre.ft-syntax-highlight[data-bs-ui-theme=macosx i]::after{content:' ';position:absolute;top:10px;left:10px;background:#f95151;border-radius:100%;width:13px;z-index:5;box-shadow:20px 0 0 0 #ffb400,40px 0 0 0 #96d46f}pre.ft-syntax-highlight[data-bs-ui-theme=macosx i] code{margin-top:0;font-family:Courier,monospace;border:10px solid #d3d3d3;border-radius:.25rem}pre.ft-syntax-highlight[data-bs-showTooltips=true i][data-bs-ui-theme=macosx i] code span:not(.newline)::after{font-family:Courier,monospace}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i]{border:1px solid #b299e6;border-radius:.25rem;color:#888;background-color:#000;background-image:-webkit-radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),-webkit-radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),-webkit-radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),-webkit-radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-image:-moz-radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),-moz-radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),-moz-radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),-moz-radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-image:-o-radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),-o-radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),-o-radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),-o-radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-image:radial-gradient(#fff,rgba(255,255,255,.2) 2px,transparent 40px),radial-gradient(#fff,rgba(255,255,255,.15) 1px,transparent 30px),radial-gradient(#fff,rgba(255,255,255,.1) 2px,transparent 40px),radial-gradient(rgba(255,255,255,.4),rgba(255,255,255,.1) 2px,transparent 30px);background-size:550px 550px,350px 350px,250px 250px,150px 150px;background-position:0 -80px,40px -20px,130px 200px,70px 20px}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i]::before{direction:ltr;font-weight:400;color:#fff;background-color:#b299e6;border-bottom:1px solid #b299e6}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i] code,pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code{margin-top:0}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i] code span.comment{color:#a0a0a0;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i] code span.newline::before{color:#d8bfd8}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i] code span.value{color:#696969}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#b299e6}pre.ft-syntax-highlight[data-bs-ui-theme=midnight i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#b299e6;color:snow}pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i]{background-image:url();border-radius:.25rem;color:snow;background:#2c3e52}pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i]::before{direction:ltr;font-weight:400;color:#fff;background:#1abd9e}pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code span.newline::before{color:#1abd9e}pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code::-webkit-scrollbar,pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code::-webkit-scrollbar-track{width:14px;height:14px;border-radius:0;background-color:#1abd9f2c}pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code::-webkit-scrollbar-thumb{border-radius:0;background-color:#1abd9e;box-shadow:unset}pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code::-webkit-resizer,pre.ft-syntax-highlight[data-bs-ui-theme=nightvision i] code::-webkit-scrollbar-corner{background-color:#1abd9f2c}pre.ft-syntax-highlight[data-bs-ui-theme=simple i]{color:#2f4f4f;background-color:#ebebeb;border-radius:5px;box-shadow:1px 0 2px #a9a9a9;background-image:url()}pre.ft-syntax-highlight[data-bs-ui-theme=simple i] code span.newline::before{color:peru}pre.ft-syntax-highlight[data-bs-ui-theme=simple i] code span.comment{color:#6e6e6e!important;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=simple i] code span.value{color:#696969!important}pre.ft-syntax-highlight[data-bs-ui-theme=simple i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::before{border-top-color:#333}pre.ft-syntax-highlight[data-bs-ui-theme=simple i][data-bs-showTooltips=true i] code span:not(.newline):not(.url)::after{background:#333;color:#f8f8ff}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i]{background-image:url();background:silver;color:#000;border:4px solid silver}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i]::before{content:'🗁 ' attr(data-bs-syntax);direction:ltr;font-weight:400;color:#fff;background:navy;font-family:Times,sans-serif;font-size:.89rem;letter-spacing:0}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i]::after{content:'🞪';position:absolute;top:9px;right:5px;color:#000;font-size:.9rem;padding:0 4px}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code{margin-top:0;font-family:Times,sans-serif;padding-left:35px}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code span.newline::before{color:#000}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code span.comment{color:#6e6e6e!important;font-weight:200}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code span.value{color:#696969!important}pre.ft-syntax-highlight[data-bs-showTooltips=true i][data-bs-ui-theme=win95 i] code span:not(.newline)::after{font-family:Times,sans-serif}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-track{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAFElEQVQIW2M4fPz0////GYAYyAIASnoKpV3w4kgAAAAASUVORK5CYII=);image-rendering:pixelated}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar{width:18px;height:18px;border-radius:0;background-color:rgba(255,255,255,.6)}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-corner{display:block;background-color:silver}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-button,pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-thumb,pre.ft-syntax-highlight[data-bs-ui-theme=win95 i]::after{border-radius:0;background-color:silver;border:1px solid #000;border-top:1px solid silver;border-left:1px solid silver;box-shadow:inset 1px 1px 0 0 #fff,inset -1px -1px 0 0 #868a8e;background-position:center center;background-repeat:no-repeat;image-rendering:pixelated}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-button:vertical:decrement{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGklEQVR4AWMYxuA/SYphmETFhDX9x4mHGQAAcL4P8dQiMq8AAAAASUVORK5CYII=)}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-button:vertical:increment{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAF0lEQVQY02NgoBf4jwJxSOHQhcNAOgMAWWAP8Rv2U3UAAAAASUVORK5CYII=)}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-button:horizontal:decrement{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAHklEQVQY02NgoBT8xyX8H5fwf1zCpOjAYwceV1EEAAO2D/HsQ4vsAAAAAElFTkSuQmCC)}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-button:horizontal:increment{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAHUlEQVQY02NgIB/8xy3xH7fEf9wS/0nUQZqrKAYAK44P8ZRmzLQAAAAASUVORK5CYII=)}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-button:active{background-position:3px 3px}pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-resizer,pre.ft-syntax-highlight[data-bs-ui-theme=win95 i] code::-webkit-scrollbar-corner{background-color:#d3d3d3;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAN0lEQVR4Ae3MgQUAMBRDwU5fFF05lb/CARTBw2Ulof0DxPtcwp3hNuEYnjbcEW4TjuFpwx3h9gMWGgZ2Y/PT2gAAAABJRU5ErkJggg==);background-position:bottom right;background-repeat:no-repeat;image-rendering:pixelated}[class*=ft-syntax-highlight]>*>pre{background-color:transparent;box-shadow:none;background-image:url();color:inherit}pre.ft-syntax-highlight code span.comment{color:rgba(240,240,240,.3);font-weight:200}pre.ft-syntax-highlight code span.url{text-decoration:underline}pre.ft-syntax-highlight code span.value{color:#b4b4b4;font-weight:300}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.boolean,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-constant,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-enum,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-structure,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.null,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.unit{color:tomato}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-function,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-udf{color:#4f9fcf}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-class,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-sub,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.variable{color:#0b9c5e}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.object,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.property{color:inherit}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.keyword{color:#70b5db}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-namespace,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.identifier-native{color:#2f6f9f}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.operand{color:#70b5db}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.typecast{color:#0000cd}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.url,pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i] code span.value{color:#ff4500}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.boolean,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-constant,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-enum,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-structure,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.null,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.unit{color:#db7970}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-function,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-udf{color:#ceafce}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-class,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-sub{color:#93db70}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.url{color:#c9db70}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.object,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.property{color:#eee8aa}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.keyword{color:#70b5db}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-namespace,pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.identifier-native{color:#db7093}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.operand{color:#70b5db}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.typecast{color:violet}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.boolean,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-constant,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-enum,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-structure,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.null,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.unit{color:#daa520}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-function,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-udf{color:#3b94d9}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-class,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-sub{color:#f8da7b}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-native{color:#20b2aa}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.object,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.property{color:tomato}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.identifier-namespace,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.keyword{color:#d979c4}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.operand,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.url{color:#48d1cc}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.typecast{color:violet}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=html i] code span.identifier,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.boolean,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-constant,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-enum,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-structure,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.null,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.unit{color:orange}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-function,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-udf{color:#16c07b}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-class,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-sub{color:#6a5acd}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-native,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.url{color:#6bbcff}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.object,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.property{color:tan}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.identifier-namespace,pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.keyword{color:#de6f5b}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.operand{color:#48d1cc}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.typecast{color:violet}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-bs-syntax-theme=simple i] *{color:#2f4f4f!important;font-weight:400}pre.ft-syntax-highlight[data-bs-syntax-theme=simple i] code span.newline::before{color:#2f4f4f!important}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.comment{color:#4e9c3a;font-weight:400}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.value{color:#f4a460;font-weight:200}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.boolean,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-namespace,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.keyword,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.null{color:#3c8dcc}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier{color:#5aaffc}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-native{color:#cc7b3c}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-class,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-structure,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-sub{color:#3cbea1}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-constant,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.identifier-enum,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.unit{color:#b8d288}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.operand{color:#70b5db}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.url{color:#3c8dcc;text-decoration:underline}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.typecast{color:#8a2be2}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-bs-syntax=html i][data-bs-showTooltips=true i] code span.identifier::after{content:'selector'}pre.ft-syntax-highlight[data-bs-syntax=html i][data-bs-showTooltips=true i] code span.identifier-native::after{content:'selector-native'}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=html i] code span.identifier-native{color:tomato}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.at-rule::after{content:"at-rule"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.identifier::after{content:"selector"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.identifier-function::after{content:"function"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.identifier-native::after{content:"selector-native"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.operand::after{content:"operand"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.property::after{content:"property"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.pseudo::after{content:"pseudo"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.unit::after{content:"unit"}pre.ft-syntax-highlight[data-bs-syntax=css i][data-bs-showTooltips=true i] code span.variable::after{content:"variable"}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i][data-bs-syntax=css i] code span.at-rule{color:#0b9c5e}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.at-rule{color:violet}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.identifier{color:orange}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.identifier-function,pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.property{color:#96cbfe}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.identifier-native{color:tomato}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.pseudo{color:#fcbb7e}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=css i] code span.variable{color:tomato}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=css i] code span.at-rule{color:#ff6090}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=css i] code span.identifier-function{color:tan}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=css i] code span.pseudo{color:peru}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=css i] code span.variable{color:tomato}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i][data-bs-syntax=css i] code span.at-rule{color:#70b5db}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i][data-bs-syntax=css i] code span.at-rule,pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i][data-bs-syntax=css i] code span.identifier-function{color:#9370db}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i][data-bs-syntax=css i] code span.variable{color:#ff4500}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.identifier-class::after{content:'indentifier-class'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.identifier-constant::after{content:'indentifier-constant'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-bs-syntax=js i][data-bs-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.identifier-class::after{content:'indentifier-class'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.identifier-constant::after{content:'indentifier-constant'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-bs-syntax=jquery i][data-bs-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.identifier-class::after{content:'indentifier-class'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.identifier-constant::after{content:'indentifier-constant'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-showTooltips=true i] code span.typecast::after{content:'typecast'}pre.ft-syntax-highlight[data-bs-syntax=php i][data-bs-syntax-theme=one-dark i] code span.identifier{color:tomato}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.identifier-class::after{content:'identifier-class'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.identifier-constant::after{content:'identifier-constant'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.identifier-native::after{content:'identifier-native'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.identifier-udf::after{content:'identifier-udf'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.object::after{content:'object'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-bs-syntax=python i][data-bs-showTooltips=true i] code span.variable::after{content:'variable'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.boolean::after{content:'boolean'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier::after{content:'identifier'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-class::after{content:'identifier-class'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-constant::after{content:'identifier-constant'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-enum::after{content:'identifier-enum'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-function::after{content:'identifier-function'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-namespace::after{content:'identifier-namespace'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-structure::after{content:'identifier-structure'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.identifier-sub::after{content:'identifier-sub'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.keyword::after{content:'keyword'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.null::after{content:'null'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.operand::after{content:'operand'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.parameter::after{content:'parameter'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.property::after{content:'property'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.typecast::after{content:'typecast'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.unit::after{content:'unit'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-showTooltips=true i] code span.variable::after{content:'variable'}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-syntax-theme=bootstrap i] code span.variable{color:inherit}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-syntax-theme=one-dark i] code span.identifier-sub{color:#3b94d9}pre.ft-syntax-highlight[data-bs-syntax=vb i][data-bs-syntax-theme=one-light i] code span.keyword{color:#6bbcff}pre.ft-syntax-highlight[data-bs-syntax=xml i][data-bs-showTooltips=true i] code span.attribute::after{content:"attribute"}pre.ft-syntax-highlight[data-bs-syntax=xml i][data-bs-showTooltips=true i] code span.identifier::after{content:"element"}pre.ft-syntax-highlight[data-bs-syntax=xml i][data-bs-showTooltips=true i] code span.identifier-namespace::after{content:"namespace"}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i][data-bs-syntax=xml i] code span.attribute{color:#4f9fcf}pre.ft-syntax-highlight[data-bs-syntax-theme=bootstrap i][data-bs-syntax=xml i] code span.identifier{color:#2f6f9f}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=xml i] code span.attribute{color:orange}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=xml i] code span.identifier{color:tomato}pre.ft-syntax-highlight[data-bs-syntax-theme=one-dark i][data-bs-syntax=xml i] code span.identifier-namespace{color:coral}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=xml i] code span.attribute{color:#16c07b}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=xml i] code span.identifier{color:#6bbcff}pre.ft-syntax-highlight[data-bs-syntax-theme=one-light i][data-bs-syntax=xml i] code span.identifier-namespace{color:#8ac1ff}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i][data-bs-syntax=xml i] code span.attribute{color:#d8bfd8}pre.ft-syntax-highlight[data-bs-syntax-theme=midnight i][data-bs-syntax=xml i] code span.identifier{color:#db7093}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i][data-bs-syntax=xml i] code span.attribute{color:#085a99}pre.ft-syntax-highlight[data-bs-syntax-theme=vbgreen i][data-bs-syntax=xml i] code span.identifier{color:#3c8dcc} \ No newline at end of file diff --git a/ckanext/schemingdcat/assets/css/schemingdcat.css b/ckanext/schemingdcat/assets/css/schemingdcat.css index 7a1c838..293616e 100644 --- a/ckanext/schemingdcat/assets/css/schemingdcat.css +++ b/ckanext/schemingdcat/assets/css/schemingdcat.css @@ -77,9 +77,6 @@ img { border-radius: 0; font-weight: 400; } -.btn-light:hover { - background-color: #f5f5f5; -} .btn-primary:hover, .btn-primary:active, .btn-primary:focus { @@ -89,7 +86,22 @@ img { .btn-danger:hover, .btn-danger:active, .btn-danger:focus { - background-color: #c9302c !important; + background-color: #ff0600 !important; +} +.btn-next { + color: #fff; + font-weight: 400; + background-color: #6c757d !important; + border-color: #6c757d !important; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075) !important; +} +.btn-next:hover { + color: #fff; + background-color: #a4a7aa !important; + border-color: #a4a7aa !important; +} +.btn-next:focus { + color: #fff; } .no-pad { padding: 0; @@ -132,6 +144,7 @@ img { } .masthead { background: #fff; + margin-top: 30px; } .masthead .nav li a { color: #525252; @@ -140,8 +153,14 @@ img { background: #003164; } .account-masthead { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000; padding: 0px 0; background: #003164; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .site-footer { margin-top:150px; @@ -275,9 +294,11 @@ img { border: 0; border-radius: 4px; -webkit-box-shadow: 0 2px 7px #b7b7b7; - box-shadow: 0 2px 7px #b7b7b7; + box-shadow: 0 2px 7px #e9e6e6; + height: 52px; position: relative; z-index: 10; + width: 102.5%; } @media only screen and (max-width: 768px) { .search-input-group #field-giant-search { @@ -303,7 +324,6 @@ button:hover, button:active, button:focus, button.active { - background: transparent !important; opacity: 1; outline: none !important; box-shadow: none; @@ -335,7 +355,6 @@ button.active { border: none; text-align: left; text-decoration: none; - line-height: 13px; z-index: -1; font-size: 0.9em; } @@ -355,11 +374,29 @@ button.active { .stages li.active:before { color: #252525; } + +.stages li.complete .highlight { + color: #777777; + background: #c5e2c4 !important; + border-radius: 10px; +} + +.stages li.complete:after { + color: #777777; + border-color: rgba(140, 198, 138, 0); + border-top-color: #c5e2c4; + border-bottom-color: #c5e2c4; +} + +.stages li.complete:before { + color: #8c9d8c; +} + /* About */ .about .page-heading { color: #003164; } -/* dateset search page */ +/* dataset search page */ @media only screen and (max-width: 768px) { .dataset-search { margin-top: 0px !important; @@ -420,8 +457,11 @@ button.active { border-radius: 10px; } -.badge-label:hover, .badge-label:focus { - background-color: #003164; +.badge-label:hover { + background-color: rgb(47 136 163 / 40%) !important; + color: #003164; + font-weight: 600; + text-decoration: none; } .h1-search { @@ -496,10 +536,15 @@ button.active { margin-left: 10px; /* Adjust the spacing between elements */ } +.badge-package { + margin-bottom: 10px; + margin-right: 0; +} + .dataset-private { margin-right: 5px; text-transform: uppercase; - background-color: #fff6e6; + background-color: #fff6e6 !important; border: 1px solid #faae20; color: #433f3f; } @@ -541,7 +586,7 @@ button.active { margin-left: 10px; } .dataset-draft.pull-left { - margin-left: 10px; + margin: 10px 0 5px 0; } .dataset-heading .label { @@ -562,6 +607,18 @@ button.active { background-color: #c9a926; border-color: #c9a926; } +.btn-info { + color: #fff; + font-weight: 400; + background-color: #6c757d !important; + border-color: #6c757d !important; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075) !important; +} +.btn-info:hover { + color: #fff; + background-color: #2e88a3 !important; + border-color: #2e88a3; +} .wrapper { border: 1px solid #e0e0e0; border-radius: 0; @@ -615,6 +672,16 @@ button.active { font-weight: 400; } +.site-footer p:hover, +.site-footer a:not(.icon-button):hover, +.site-footer label:hover, +.site-footer small:hover, +.footer-powered-by:hover { + color: #003164; + font-weight: 400; + text-decoration: none; +} + .site-footer { margin-top: 150px; background: #f7f7f7; @@ -626,17 +693,6 @@ button.active { box-shadow: 0 0 0 0 rgb(0 0 0 / 5%); } -.search-input-group #field-giant-search { - border: 0; - border-radius: 4px; - -webkit-box-shadow: 0 2px 7px #b7b7b7; - box-shadow: 0 2px 7px #e9e6e6; - height: 52px; - position: relative; - z-index: 10; - width: 102.5%; -} - .box { background-color: #fff; border: 1px solid #f3f3f3; @@ -648,7 +704,33 @@ button.active { } .addons { - text-align: center; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.addons .tag { + flex: 1 1 calc(33.333% - 10px); + box-sizing: border-box; + margin: 5px; +} + +@media (max-width: 768px) { + .addons .tag { + flex: 1 1 calc(50% - 10px); + } +} + +@media (max-width: 480px) { + .addons .tag { + flex: 1 1 100%; + } +} + +.homepage .module-search .search-form { + border-radius: 0.25rem; + background-color: #005d7a; + padding: 0; } .module-content.search-form { @@ -712,6 +794,7 @@ button.active { margin-left: 5px; display: flex; justify-content: flex-end; + font-size: 12px; } .filters .module .sorting { @@ -955,7 +1038,6 @@ img.item_icon { img.item_image { max-width: 100%; max-height: 100%; - border: 1px solid #ddd; border-radius: 5px; } @@ -982,6 +1064,7 @@ img.item_image { margin-right: 10px; z-index: 1; position: relative; + border-radius: 5px; } .info_image { @@ -1072,12 +1155,17 @@ img.item_image { } .thead-normal_table { - background-color: #e8e8e8; - border: 1px solid #ddd; + background-color: #e8e8e8; + border: 1px solid #ddd; padding: 5px; text-align: center; + color: #585858; font-size: 16px; - font-weight: bold; + font-weight: 600; +} + +.table > :not(:first-child) { + border-top: 2px solid #ddd; } .toggle-table { @@ -1187,10 +1275,15 @@ img.item_image { .permalink-copy { font-size: 24px; - color: #3A833A; + color: #2f88a3; display: flex; justify-content: right; align-items: right; + transition: color 0.3s ease, transform 0.3s ease; +} + +.permalink-copy i { + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } /* dataset form */ @@ -1206,7 +1299,7 @@ img.item_image { opacity: 0.6; transition: all 0.2s ease; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.15); - margin: 1rem; + margin-bottom: 15px; color: #9d9d9d; border-radius: 10px; } @@ -1244,7 +1337,14 @@ img.item_image { } .form-actions { - overflow:hidden; + overflow: hidden; +} + +.form-actions .action-info { + float: left; + width: 35%; + margin-right: 25px; + text-align: justify; } .slug-preview { @@ -1254,6 +1354,17 @@ img.item_image { } /* metadata_info */ +/* Asegúrate de que la tabla no se ajuste al tamaño del texto */ +.table { + table-layout: fixed; /* Fija el layout de la tabla */ + width: 100%; /* Asegura que la tabla ocupe el 100% del contenedor */ +} +/* Apply text truncation to cells in metadata_info */ +.truncate-text { + overflow: hidden; /* Hides the text overflow */ + text-overflow: ellipsis; /* Adds ellipsis if text is too long */ +} + .table tr.toggle-separator { display: table-row; } @@ -1332,19 +1443,102 @@ img.item_image { } .download-links .btn-group .btn{ - max-width: 130px; + max-width: 115px; +} + +.download-links-container { + display: flex; + align-items: stretch; + justify-content: flex-end; +} + +.download-links { + display: flex; + align-items: center; +} + +.metadata-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 0 10px; +} + +.metadata-header h2 { + margin: 0; + line-height: 1; +} + +.custom-dropdown-toggle { + width: 15px; + display: flex; + align-items: center; + justify-content: center; +} + +.custom-dropdown-toggle .caret { + margin-left: -0.5rem; + display: inline-block; + vertical-align: middle; +} + +.metadata-label { + display: flex; + align-items: center; + padding: 0 10px; +} + +/* Estilos personalizados para el separador */ +.separator { + margin: 0 2px; + color: #6c757d; + font-weight: bold; +} + +/* Customized styles for the specific drop-down menu */ +.custom-dropdown-menu { + background-color: #f8f9fa; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + padding: 0.5rem 0; +} + +.custom-dropdown-menu .dropdown-header { + font-size: 13px; + font-weight: 600; + color: #003164; + padding: 0.25rem 0.5rem; + border-bottom: 1px solid #dee2e6; } -.metadata-label{ +.custom-dropdown-menu li a { display: block; + padding: 0.25rem 0.5rem; + color: #007bff; + text-decoration: none; +} + +.custom-dropdown-menu li a:hover { + background-color: #e9ecef; + color: #0056b3; +} + +.custom-dropdown-menu .metadata-download_info_label { + font-size: 12px; + color: #6c757d; +} +.metadata-label { + display: flex; + align-items: center; + justify-content: center; max-width: 180px; - max-height: 34px; - padding: 6px 5px 6px 5px; + max-height: 35px; + padding: 6px 5px; margin-right: 5px; text-align: center; font-weight: 600; letter-spacing: -0.01em; - color: #ECECEC; font-size: 14px; background-color: #f5f5f5; @@ -1353,6 +1547,10 @@ img.item_image { border-radius: 4px; } +.metadata-label .fa-check-circle { + margin-left: 5px; +} + .metadata-label > i { font-size: 15px; color: #3fb950; @@ -1447,24 +1645,59 @@ img.item_image { box-shadow: none; } -.tag { - display: inline-block; - color: #fff; - background-color: #003164; +.tags { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.index_tags { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; +} + +.index_tags .tag { + margin: 3px; + color: #6d747b; + background-color: #0031641f; padding: 1px 14px; border-radius: 4px; - -webkit-box-shadow: none; box-shadow: none; font-size: 12px; vertical-align: middle; - margin: 3px; + flex: 1 1 auto; + text-align: center; + max-width: calc(33.33% - 6px); } - .tag-list { - padding-left: 0; + display: flex; + flex-wrap: wrap; + width: 100%; + padding: 5px; margin: 0; list-style: none; - padding: 5px; + justify-content: space-between; +} + +.tag-container { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; /* Alinear los elementos a la izquierda */ +} + +.tag { + margin: 3px; + display: inline-block; + color: #6d747b; + background-color: #0031641f; + padding: 1px 14px; + border-radius: 4px; + box-shadow: none; + font-size: 12px; + vertical-align: middle; + flex: 0 0 auto; } .tag img { @@ -1479,6 +1712,7 @@ img.item_image { font-size: 10px; } } + a.tag:hover { text-decoration: none; font-weight: 600; @@ -1488,6 +1722,7 @@ a.tag:hover { -webkit-box-shadow: none; box-shadow: none; } + .tag:hover { background-color: #2e88a3; } @@ -1580,21 +1815,22 @@ a.endpoint { letter-spacing: -0.5px; } -a.endpoints_layout1 { +a.endpoints_index_cards { text-align: center; background-color: transparent; border-color: #2e88a3; color: #2e88a3; font-weight: 500; letter-spacing: -0.5px; + font-size: 14px; } -a.endpoints_layout1:hover { +a.endpoints_index_cards:hover { background-color: #2e88a3; border-color: #ffffff; } -a.endpoints_layout1:hover { +a.endpoints_index_cards:hover { background-color: #2e88a3; border-color: #ffffff; } @@ -1621,6 +1857,10 @@ a.endpoints_index:hover { border-color: #ffffff; } +.endpoints_index_addons { + text-align: center; +} + /* Homepage Organizations */ .organization { background-color: #f5f5f5; @@ -1760,11 +2000,23 @@ a.endpoints_index:hover { } /* footer */ .site-footer .attribution .ckan-footer-logo { - background: url("../../images/default/ckan-logo-footer.png") no-repeat top left; + background: url("../../images/default/ckan-logo.png") no-repeat center center; + width: 105px; + height: 46px; + background-size: contain; + display: flex; + justify-content: center; + align-items: center; + margin: 0 auto; /* Centra el contenedor del logo */ } -.site-footer { - padding: 60px 0; +.footer-powered-ckan, +.footer-socicons, +.footer-sitelinks { + width: 100%; + display: flex; + justify-content: flex-start; } + .site-footer .logo { margin-bottom: 40px; } @@ -1781,6 +2033,59 @@ a.endpoints_index:hover { .site-footer .footer-links ul li { margin-bottom: 15px; } + +@media (max-width: 600px) { + .site-footer .container { + text-align: center; + } + + .site-footer .row { + flex-direction: column; + align-items: center; + } + + .site-footer .footer-links, + .site-footer .attribution, + .site-footer .footer-powered-ckan, + .site-footer .footer-socicons { + display: flex; + justify-content: center; + align-items: center; + text-align: center; + width: 100%; + } + + .site-footer .footer-links ul { + padding: 0; + } + + .site-footer .footer-links ul li { + display: inline-block; + margin: 0 10px; + } + + .site-footer .footer-socicons { + margin-top: 10px; + } + + .site-footer .footer-socicons .icon-button { + margin: 0 5px; + } + + .site-footer .footer-powered-ckan { + display: flex; + justify-content: center; + align-items: center; + } +} + +/* aligns the logo to the center of its parent element */ +.footer-powered-ckan .hide-text.ckan-footer-logo { + display: flex; + justify-content: center; + align-items: center; +} + /* Selector drop-down */ .select2-container .select2-choice .select2-arrow { border-left: 0; @@ -1805,6 +2110,14 @@ a.endpoints_index:hover { } /* Code CSS */ +pre.ft-syntax-highlight code { + padding: 0; /* Reset padding */ + font-size: inherit; /* Reset font size */ + color: inherit; /* Reset color */ + background-color: inherit; /* Reset background color */ + border-radius: 0; /* Reset border radius */ +} + code { padding: 2px 4px; font-size: 11px; @@ -1834,7 +2147,7 @@ code { font-size: 0.875rem; color: #333333; text-align: left; - background-color: #fff; + background-color: #e9f0f3; border: 0; border-radius: 0; overflow-anchor: none; @@ -2040,109 +2353,109 @@ input#lang-r:checked ~ div .example-r { } /* distribution formats */ -.label[data-format=css], -.label[data-format*=css] { +.label[data-bs-format=css], +.label[data-bs-format*=css] { background-color: #0096e6; } -.label[data-format=csv], -.label[data-format*=csv], -.label[data-format*=tsv], -.label[data-format*=xls], -.label[data-format*=xlsx], -.label[data-format*=gspread], -.label[data-format*=gsheet], -.label[data-format*=sheet] { +.label[data-bs-format=csv], +.label[data-bs-format*=csv], +.label[data-bs-format*=tsv], +.label[data-bs-format*=xls], +.label[data-bs-format*=xlsx], +.label[data-bs-format*=gspread], +.label[data-bs-format*=gsheet], +.label[data-bs-format*=sheet] { background-color: #45b058; } -.label[data-format=csw], -.label[data-format*=csw], -.label[data-format*=ows], -.label[data-format*=ogc] { +.label[data-bs-format=csw], +.label[data-bs-format*=csw], +.label[data-bs-format*=ows], +.label[data-bs-format*=ogc] { background-color: #5e4f11; } -.label[data-format=doc], -.label[data-format*=docx], -.label[data-format*=odt], -.label[data-format*=md], -.label[data-format*=tex], -.label[data-format=txt], -.label[data-format*=txt] { +.label[data-bs-format=doc], +.label[data-bs-format*=docx], +.label[data-bs-format*=odt], +.label[data-bs-format*=md], +.label[data-bs-format*=tex], +.label[data-bs-format=txt], +.label[data-bs-format*=txt] { background-color: #42a5f5; } -.label[data-format=geojson], -.label[data-format=json], -.label[data-format*=json] { +.label[data-bs-format=geojson], +.label[data-bs-format=json], +.label[data-bs-format*=json] { background-color: #eeaf4b; } -.label[data-format=jpeg], -.label[data-format=jpg], -.label[data-format*=jpg] { +.label[data-bs-format=jpeg], +.label[data-bs-format=jpg], +.label[data-bs-format*=jpg] { background-color: #14a085; } -.label[data-format=kml], -.label[data-format=kmz], -.label[data-format*=kmz] { +.label[data-bs-format=kml], +.label[data-bs-format=kmz], +.label[data-bs-format*=kmz] { background-color: #8D6FA9; } -.label[data-format=png], -.label[data-format*=png] { +.label[data-bs-format=png], +.label[data-bs-format*=png] { background-color: #659c35; } -.label[data-format=mp3], -.label[data-format*=mp3], -.label[data-format*=mpeg3] { +.label[data-bs-format=mp3], +.label[data-bs-format*=mp3], +.label[data-bs-format*=mpeg3] { background-color: #7d6599; } -.label[data-format=mp4], -.label[data-format*=mp4], -.label[data-format*=mpeg4] { +.label[data-bs-format=mp4], +.label[data-bs-format*=mp4], +.label[data-bs-format*=mpeg4] { background-color: #ff5364; } -.label[data-format=shp], -.label[data-format*=shp], -.label[data-format*=shapefile], -.label[data-format*=gdb], -.label[data-format*=geodatabase] { +.label[data-bs-format=shp], +.label[data-bs-format*=shp], +.label[data-bs-format*=shapefile], +.label[data-bs-format*=gdb], +.label[data-bs-format*=geodatabase] { background-color: #daf7ff; } -.label[data-format=wcs], -.label[data-format*=wcs] { +.label[data-bs-format=wcs], +.label[data-bs-format*=wcs] { background-color: #38586C; } -.label[data-format=wfs], -.label[data-format*=wfs] { +.label[data-bs-format=wfs], +.label[data-bs-format*=wfs] { background-color: #5783A3; } -.label[data-format=wms], -.label[data-format*=wms] { +.label[data-bs-format=wms], +.label[data-bs-format*=wms] { background-color: #ADAB46; } -.label[data-format=wmts], -.label[data-format*=wmts] { +.label[data-bs-format=wmts], +.label[data-bs-format*=wmts] { background-color: #6E512F; } -.label[data-format=xml], -.label[data-format*=xml] { +.label[data-bs-format=xml], +.label[data-bs-format*=xml] { background-color: #fc7b24; } -.label[data-format=zip], -.label[data-format*=zip] { +.label[data-bs-format=zip], +.label[data-bs-format*=zip] { background-color: #fcba2f; } @@ -2158,6 +2471,9 @@ input#lang-r:checked ~ div .example-r { bottom: 0; left: 50%; transform: rotate(0) translate(-50%, -50%); + width: 90%; + max-width: 90%; + max-height: 5%; } } @@ -2172,7 +2488,7 @@ input#lang-r:checked ~ div .example-r { border: 2px solid #003164; padding: 10px; cursor: pointer; - z-index: 100000000; + z-index: 9; opacity: 0.9; margin-left: 15px; border-radius: 0px 0 15px 15px; @@ -2341,7 +2657,806 @@ input#lang-r:checked ~ div .example-r { } /* Tabs package_form */ +.group-tab { + margin-right: -15px; + margin-left: 0px; +} + +.tabs_container { + padding-bottom: 10px; + display: block; +} + .tab-content { display: none; padding-bottom: 10px; + +} + +.tab-link.form_tab { + border-radius: 10px 10px 0px 0px; +} + +.form-group-list { + background-color: #f9f9f9; + border: 1px solid #ddd; + border-radius: 0px 0px 10px 10px; + padding: 10px; + font-size: 12px; + max-width: 100%; +} + +.form-group-list li { + list-style-type: none; + padding: 5px 5px; + border-bottom: 1px solid #eee; + font-size: 1em; +} + +.form-group-list li:last-child { + border-bottom: none; +} + +.form-group-list li a { + text-decoration: none; + color: #333; + display: block; +} + +.form-group-list li:hover { + background-color: #f1f1f1; +} + +.form-group-list li.active { + background-color: #007bff; + color: #fff; +} + +.form-group-list li.active a { + color: #fff; +} + +.required-fields { + position: relative; + padding: 10px; + border-radius: 4px; +} + +.required-fields::before { + content: ''; + position: absolute; + left: -5px; + top: 5%; + bottom: 5%; + width: 5px; + background-color: #d9534f; + border-radius: 5px; +} + +/* About portal - Figures */ +.homepage .module-search .sct-about-tags { + padding: 5px 20px 10px 20px; + background-color: transparent; + border-radius: 0; +} + +.homepage .module-search .module-content .sdct-about-heading { + font-size: 4em; + font-weight: 600; + color: #2f88a3; + text-align: center; +} + +.sct-about-tags { + flex: 1 1 auto; + margin: 3px; + display: inline-block; + color: #6d747b; + background-color: #0031641f; + padding: 1px 14px; + border-radius: 4px; + -webkit-box-shadow: none; + box-shadow: none; + font-size: 12px; + vertical-align: middle; +} + +.sct-about-h3-container, +.sct-about-h4-container { + text-align: center; +} + +.sct-about-h3 { + position: relative; + display: inline-block; + font-weight: 600; + color: #003164; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); +} + +.sct-about-h4 { + position: relative; + display: inline-block; + font-weight: 600; + color: #003164; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); + font-size: 18px; +} + +.sct-about-h3:after { + content: ""; + display: block; + width: 50px; + height: 4px; + background-color: #2f88a3; + margin-left: auto; + border-radius: 0.3rem; +} + +.sct-about-h4:after { + content: ""; + display: block; + width: 35px; + height: 4px; + background-color: #2f88a3; + margin-left: auto; + border-radius: 3px; +} + +.sct-about-figures { + /* margin: 2rem auto; */ + border-radius: 8px; + /* border: 1px solid #f3f3f3; */ +} + +.sct-about-figures__value i { + margin-right: 0.5rem; +} + +.sct-about-figures__items { + display: grid; + grid-template-columns: 1fr; + grid-column-gap: 2rem; + grid-row-gap: 0rem; +} + +.sct-about-figures__item { + text-align: center; + padding: 1rem; + border-radius: 8px; + /* border: 1px solid #0031641f; */ + border: 1px solid #00316426; + /* background-color: #003164; */ + color: #003164; +} + +.sct-about-figures__value { + font-size: 2rem; + font-weight: bold; + color: #003164; +} + +.sct-about-figures__title a { + text-decoration: none; + color: #a8a6a3; + font-size: 1.2rem; +} + +.sct-about-figures__title a:hover { + color: #003164; +} + +@media (min-width: 996px) { + .sct-about-figures__items { + grid-template-columns: repeat(3, 1fr); + } +} + +/* About portal - Figures alt */ +.sct-about-figures-alt-card { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 1rem; + border: 1px solid #00316426; + border-radius: 8px; + background-color: transparent; + color: #003164; + text-align: center; + height: 5rem; +} + +.sct-about-figures-alt-card-icon { + height: 100%; + width: 30%; + float: left; + border-radius: 4px 30px 30px 4px / 4px 40px 40px 4px; + display: flex; + justify-content: center; + align-items: center; + background-color: #003164; +} + +.sct-about-figures-alt-card-icon i { + font-size: 2rem; + color: #e8e6e3; +} + +.sct-about-figures-alt-card-content { + flex-grow: 1; + padding-left: 1rem; +} + +.sct-about-figures-alt-card-title h3 { + margin: 0; + font-size: 1.5rem; + font-weight: bold; +} + +.sct-about-figures-alt-card-text { + display: flex; + align-items: center; + justify-content: center; +} + +.sct-about-figures-alt-card-text a { + text-decoration: none; + color: #a8a6a3; + font-size: 0.9rem; +} + +.sct-about-figures-alt-card-text a:hover { + color: #003164; +} + +.sct-about-figures-alt-card-text i { + margin-right: 0.5rem; +} + +/* About portal - Themes */ +.sct-about-themes { + margin-top: 10px; + margin-bottom: 10px; +} + +.sct-about-themes-card-container { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 10px; +} + + +.sct-about-themes-card { + flex: 1 1 calc(25% - 20px); + max-width: 150px; + min-width: 100px; + height: auto; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + text-align: center; + padding: 1rem; + border: 1px solid #ddd; + border-radius: 8px; + background-color: #fff; + text-decoration: none; + color: #a8a6a3; + margin: 10px 0; +} + +.sct-about-themes-card-label { + font-size: 12px; + white-space: normal; + word-wrap: break-word; + overflow: hidden; + text-overflow: ellipsis; + max-height: 3em; + max-width: 100%; +} + +.sct-about-themes-card-acronym { + font-size: 14px; + font-weight: bold; + text-transform: uppercase; +} + +/* Media queries */ +@media (max-width: 1200px) { + .sct-about-themes-card { + flex: 1 1 calc(33.33% - 20px); + } +} + +@media (max-width: 992px) { + .sct-about-themes-card { + flex: 1 1 calc(50% - 20px); + } +} + +@media (max-width: 768px) { + .sct-about-themes-card { + flex: 1 1 calc(100% - 20px); + } +} + +.sct-about-themes-card:hover { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + color: #003164; + transform: scale(1.05); + text-decoration: none !important; +} + +.sct-about-themes-card-icon-container { + position: relative; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 1rem; +} + +.sct-about-themes-card-icon { + width: 100px; + height: 100px; + border-radius: 50%; + overflow: hidden; + background-color: #f7f7f8; + position: relative; +} + +.sct-about-themes-card-icon img { + width: 75%; + height: 75%; + object-fit: cover; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + border-radius: 50%; +} +.sct-about-themes-card-count { + position: absolute; + top: 0px; + right: -5px; + padding: 2px 8px; + background-color: #e8e6e3; + border-radius: 1em; + font-size: 14px; + font-weight: bold; + color: #626b6f; +} + +.sct-about-themes-card-label a { + text-decoration: none; + color: #1a5668; + font-size: 0.9rem; +} + +.sct-about-themes-card-label a:hover { + color: #1a5668; +} + +.sct-about-themes-title { + margin-bottom: 1rem; + text-align: center; +} + +.sct-about-themes-items { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; +} + +/* header language selector */ +.nav-item.dropdown .dropdown-menu { + background-color: white; + border: 1px solid #ccc; + border-radius: 0.3rem; + padding: 0.5rem; + min-width: auto; +} + +.nav-item.dropdown .dropdown-menu a { + color: #a8a6a3; + text-decoration: none; + display: block; + white-space: nowrap; /* prevents text from being wrapped on multiple lines */ + overflow: hidden; /* Hide text overflow */ + text-overflow: ellipsis; /* Add ellipses if text is too long */ +} + +.nav-item.dropdown .dropdown-menu a:hover { + background-color: transparent; + color: #003164; +} + +/* Make sure the list items behave like blocks */ +.nav-item.dropdown .dropdown-menu li { + display: block; + width: 100%; +} + +/* CKAN 2.10 */ +/* Fix Flask debug panels */ +/* Selects all elements whose ID begins with 'flDebug' and ends with 'Panel-content' */ +[id^="flDebug"][id$="Panel-content"] { + display: none; /* Hides the default panels */ + position: fixed; + top: 0; + right: 0; + height: 100%; + overflow-y: auto; + background-color: white; + box-shadow: -2px 0 5px rgba(0, 0, 0, 0.5); + z-index: 10000000; /* Make sure it is above other elements */ +} + +/* Show panels when they are active */ +[id^="flDebug"][id$="Panel-content"].active { + display: block; +} +/* Fix masthead navbar */ +.masthead .main-navbar ul li a { + padding: 0.6rem 0.9rem; + color: #7a7a7a; + text-decoration: none; +} + +/* Estilos para .masthead .main-navbar */ +.masthead .main-navbar ul li a:hover { + color: #003164; /* Cambia el color al pasar el cursor */ + text-decoration: none; /* Asegúrate de que no haya subrayado */ + background-color: transparent; +} + +/* Estilos específicos para .masthead .main-navbar.collapse.navbar-collapse */ +.masthead .main-navbar.collapse.navbar-collapse > ul.navbar-nav > li:hover > a, +.masthead .main-navbar.collapse.navbar-collapse > ul.navbar-nav > li:focus > a, +.masthead .main-navbar.collapse.navbar-collapse > ul.navbar-nav > li.active > a { + border-radius: 0 0 0.3rem 0.3rem; + color: #2f88a3; + background-color: transparent; + border-bottom: 5px solid #2f88a3; +} + +/* Excluir estilos para .nav-tabs */ +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + border-bottom: 3px solid #2e88a3; + color: #2f88a3; +} + +/* Excluir estilos para .module-content.page-header */ +.module-content.page-header .nav > li.active > a, +.module-content.page-header .nav > li.active > a:hover, +.module-content.page-header .nav > li.active > a:focus { + border-bottom: 3px solid #2e88a3; + color: #2f88a3; +} + +/* Estilos adicionales para .page-header .nav-tabs */ +.page-header .nav-tabs li.active a, +.page-header .nav-tabs a:hover { + border: transparent; + background-color: #fff; + border-bottom-color: transparent; +} + +/* Style for the icon button */ +.icon-button { + display: inline-flex; + align-items: center; + justify-content: center; + text-decoration: none; + color: var(--primary); + border-radius: 50%; + padding: 0.4rem; + transition: background-color 0.3s, color 0.3s; + background-color: hwb(0deg 83% 17% / 20%); +} + +/* Hover effect */ +.icon-button:hover { + background-color: rgb(47 136 163 / 40%); + color: #003164; + text-decoration: none; +} + +/* Style for the icon */ +.icon-button .fab { + font-size: 1.5rem; +} + +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.input-group .btn { + position: absolute; + z-index: 2; +} +.btn-light:hover, .btn-default:hover { + background-color: #f7f7f7 !important; + border-color: #dee2e6; +} + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} + +/* harvest labels */ +.label { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; +} + +/* Activity - Fix xloader logs */ +.fa-lg { + font-size: 14px !important; +} +.activity { + padding: 0; + list-style-type: none; + background: transparent url('../../images/default/dotted.png') 14px 0 repeat-y; +} +.activity .item { + position: relative; + margin: 0 0 15px 0; + padding: 0; +} +.activity .item:before, +.activity .item:after { + display: table; + content: " "; +} +.activity .item:after { + clear: both; +} +.activity .item:before, +.activity .item:after { + display: table; + content: " "; +} +.activity .item:after { + clear: both; +} +.activity .item .icon { + display: block; + position: absolute; + top: 0; + left: 0; + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + color: #FFFFFF; + font-weight: normal; + margin-right: 10px; + border-radius: 100px; +} +.activity .item .user-image { + border-radius: 100px; +} +.activity .item .actor .user-image { + position: absolute; + top: 0; + left: 40px; +} +.activity .item p { + font-size: 14px; + line-height: 1.5; + margin: 5px 0 0 80px; +} +.activity .item .date { + color: #999; + font-size: 12px; + white-space: nowrap; +} +.activity .item .new { + display: block; + position: absolute; + overflow: hidden; + top: -3px; + left: -3px; + + height: 10px; + background-color: #A35647; + border: 1px solid #FFF; + text-indent: -1000px; + border-radius: 100px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} +.activity .item.no-avatar p { + margin-left: 40px; +} +.activity .load-less { + margin-bottom: 15px; +} +.activity .item .icon { + background-color: #999999; +} +.activity .item.failure .icon { + background-color: #B95252; +} +.activity .item.success .icon { + background-color: #69A67A; +} +.activity .item.added-tag .icon { + background-color: #6995a6; +} +.activity .item.changed-group .icon { + background-color: #767DCE; +} +.activity .item.changed-package .icon { + background-color: #8c76ce; +} +.activity .item.changed-package_extra .icon { + background-color: #769ace; +} +.activity .item.changed-resource .icon { + background-color: #aa76ce; +} +.activity .item.changed-user .icon { + background-color: #76b8ce; +} +.activity .item.changed-organization .icon { + background-color: #699fa6; +} +.activity .item.deleted-group .icon { + background-color: #B95252; +} +.activity .item.deleted-package .icon { + background-color: #b97452; +} +.activity .item.deleted-package_extra .icon { + background-color: #b95274; +} +.activity .item.deleted-resource .icon { + background-color: #b99752; +} +.activity .item.deleted-organization .icon { + background-color: #b95297; +} +.activity .item.new-group .icon { + background-color: #69A67A; +} +.activity .item.new-package .icon { + background-color: #69a68e; +} +.activity .item.new-package_extra .icon { + background-color: #6ca669; +} +.activity .item.new-resource .icon { + background-color: #81a669; +} +.activity .item.new-user .icon { + background-color: #69a6a3; +} +.activity .item.new-organization .icon { + background-color: #81a669; +} +.activity .item.removed-tag .icon { + background-color: #b95297; +} +.activity .item.deleted-related-item .icon { + background-color: #b9b952; +} +.activity .item.follow-dataset .icon { + background-color: #767DCE; +} +.activity .item.follow-user .icon { + background-color: #8c76ce; +} +.activity .item.new-related-item .icon { + background-color: #95a669; +} +.activity .item.follow-group .icon { + background-color: #8ba669; +} + +/* contact info */ +.module_package_info { + padding-top: 10px !important; +} + +/* Common Quote Alert Styles */ +.quote-alert { + padding: 10px; + margin: 10px 0; + border-radius: 4px; +} + +.quote-alert-title { + font-weight: bold; + display: flex; + align-items: center; + margin-bottom: 5px; +} + +.quote-alert-title i { + margin-right: 5px; + font-size: 1.2em; /* Aumenta el tamaño del icono */ +} + +.quote-alert-content { + text-align: justify; +} + +/* Specific Quote Types */ +.tip { + border-left: 4px solid #238636; + background-color: #e7f3ff; +} + +.tip .quote-alert-title { + color: #238636; +} + +.quote-tip.note strong { + color: #238636; +} + +.note { + border-left: 4px solid #0366d6; + background-color: #e7f3ff; +} + +.note .quote-alert-title { + color: #0366d6; +} + +.quote-alert.note strong { + color: #0366d6; +} + +.warning { + border-left: 4px solid #c9a926; + background-color: #ffeef0; +} + +.warning .quote-alert-title { + color: #c9a926; +} + +.quote-alert.warning strong { + color: #c9a926; +} + +.caution { + border-left: 4px solid #f85149; + background-color: #f9e1e0; +} + +.caution .quote-alert-title { + color: #f85149; +} + +.quote-alert.caution strong { + color: #f85149; +} + +.important { + border-left: 4px solid #8957e5; + background-color: #ffeef0; +} + +.important .quote-alert-title { + color: #8957e5; +} + +.quote-alert.important strong { + color: #8957e5; } \ No newline at end of file diff --git a/ckanext/schemingdcat/assets/js/modules/schemingdcat-form-tabs.js b/ckanext/schemingdcat/assets/js/modules/schemingdcat-form-tabs.js index 971786e..9fd1b93 100644 --- a/ckanext/schemingdcat/assets/js/modules/schemingdcat-form-tabs.js +++ b/ckanext/schemingdcat/assets/js/modules/schemingdcat-form-tabs.js @@ -1,26 +1,84 @@ $(document).ready(function() { + // Get the csrf value from the page meta tag + var csrf_value = $('meta[name=_csrf_token]').attr('content'); + // Create the hidden input + var hidden_csrf_input = $(''); + + // Append CSRF token to all forms + $('form').each(function() { + hidden_csrf_input.clone().prependTo($(this)); + }); + // Initialize the first tab and pane as active $("#groupTab .nav-pills li:first").addClass("active"); - $("#groupTab .tab-pane:first").addClass("active fade in"); + $("#groupTab .nav-pills li:first .nav-link").addClass("active"); + $("#groupTab .tab-pane:first").addClass("active show"); + + // Show the form group list of the first tab + $("#groupTab .nav-pills li:first .form-group-list").show(); // Move forward $("#next-tab").on('click', function(e) { - $('.dataset-form .nav > .active').next('li').find('a').trigger('click'); - // Check if there is another tab, if not, swap buttons - if ($('.dataset-form .nav > .active').next('li').length == 0) { + e.preventDefault(); + var $activeTab = $('.tabs_container .nav-item .nav-link.active').closest('.nav-item'); + var $nextTab = $activeTab.next('.nav-item'); + + if ($nextTab.length > 0) { + $activeTab.find('.nav-link').removeClass('active'); + $nextTab.find('.nav-link').addClass('active'); + $nextTab.find('a.nav-link').tab('show'); // Use .tab('show') to activate the next tab + + // Hide all form group lists and show the one for the next tab + $('.form-group-list').hide(); + $nextTab.find('.form-group-list').show(); + + // Scroll to the corresponding content + var targetTabId = $nextTab.find('a.nav-link').attr('href'); + $('html, body').animate({ + scrollTop: $(targetTabId).offset().top + }, 700, function() { + // Update the active tab pane after scroll animation completes + $('.tab-pane').removeClass('active show'); + $(targetTabId).addClass('active show'); + }); + } + + // Check if the next tab is the last tab + if ($nextTab.is(':last-child')) { $('#next-tab').hide(); } - e.preventDefault(); + return false; }); - // Hide initially - //$('#next-tab+button').hide(); + // Show/hide form group list on tab click + $(".tab-link").on('click', function(e) { + e.preventDefault(); + var $formGroupList = $(this).siblings(".form-group-list"); + $(".form-group-list").not($formGroupList).slideUp(); + $formGroupList.slideToggle(); + + // Scroll to the tab + var targetTabId = $(this).attr('href'); + $('html, body').animate({ + scrollTop: $(targetTabId).offset().top + }, 800, function() { + // Update the active tab pane after scroll animation completes + $('.tab-pane').removeClass('active show'); + $(targetTabId).addClass('active show'); + }); + + // Show the next button if not on the last tab + var $clickedTab = $(this).parent('li'); + if (!$clickedTab.is(':last-child')) { + $('#next-tab').show(); + } + }); // Remove duplicate form groups var seenFormGroups = new Set(); $("#groupTab .tab-pane .card").each(function() { - var formGroupId = $(this).attr("class").split('-group')[0]; + var formGroupId = $(this).data("bs-form_group_id"); if (seenFormGroups.has(formGroupId)) { $(this).remove(); } else { @@ -28,6 +86,29 @@ $(document).ready(function() { } }); - // Note: Uncomment the #next-tab+button selectors to hide the submit button till you've - // hit the last tab of schema items. + // Handle secondary links click + $(".secondary-link").on('click', function(e) { + e.preventDefault(); + var targetId = $(this).attr('href'); + var $targetTab = $(targetId).closest('.tab-pane'); + var targetTabId = $targetTab.attr('id'); + + // Activate the corresponding tab + $('a[href="#' + targetTabId + '"]').tab('show'); + + // Scroll to the form group + $('html, body').animate({ + scrollTop: $(targetId).offset().top + }, 700, function() { + // Update the active tab pane after scroll animation completes + $('.tab-pane').removeClass('active show'); + $(targetTabId).addClass('active show'); + }); + + // Show the next button if not on the last tab + var $clickedTab = $('a[href="#' + targetTabId + '"]').parent('li'); + if (!$clickedTab.is(':last-child')) { + $('#next-tab').show(); + } + }); }); \ No newline at end of file diff --git a/ckanext/schemingdcat/assets/js/modules/schemingdcat-permanent-url.js b/ckanext/schemingdcat/assets/js/modules/schemingdcat-permanent-url.js index 9c5af3e..20fd4e0 100644 --- a/ckanext/schemingdcat/assets/js/modules/schemingdcat-permanent-url.js +++ b/ckanext/schemingdcat/assets/js/modules/schemingdcat-permanent-url.js @@ -49,7 +49,7 @@ if (result) { var input = document.querySelector("#input"); var span = document.createElement("span"); - span.innerHTML = ''; + span.innerHTML = ''; span.classList.add("permalink-copy"); input.parentNode.replaceChild(span, input); diff --git a/ckanext/schemingdcat/assets/js/plugins/jquery.schemingdcat-slug-preview.js b/ckanext/schemingdcat/assets/js/plugins/jquery.schemingdcat-slug-preview.js index b758a93..ed209ba 100644 --- a/ckanext/schemingdcat/assets/js/plugins/jquery.schemingdcat-slug-preview.js +++ b/ckanext/schemingdcat/assets/js/plugins/jquery.schemingdcat-slug-preview.js @@ -24,65 +24,64 @@ */ (function ($, window) { var escape = $.url.escape; - + function slugPreview(options) { - options = $.extend(true, slugPreview.defaults, options || {}); - - var collected = this.map(function () { - var element = $(this); - var field = element.find('input'); - var preview = $(options.template); - var value = preview.find('.slug-preview-value'); - var required = $('
').append($('.control-required', element).clone()).html(); - - // Check if slugPreview already exists in the parent container - if (element.parent().find('.slug-preview').length > 0) { - return; - } - - function setValue() { - var val = escape(field.val()) || options.placeholder; - value.text(val); - } - - preview.find('strong').html(required + ' ' + options.i18n['URL'] + ':'); - preview.find('.slug-preview-prefix').text(options.prefix); - preview.find('button').text(options.i18n['Edit']).click(function (event) { - event.preventDefault(); - element.show(); - preview.hide(); + options = $.extend(true, slugPreview.defaults, options || {}); + + var collected = this.map(function () { + var element = $(this); + var field = element.find('input'); + var preview = $(options.template); + var value = preview.find('.slug-preview-value'); + var required = $('
').append($('.control-required', element).clone()).html(); + + // Check if slugPreview already exists in the parent container + if (element.parent().find('.slug-preview').length > 0) { + return; + } + + function setValue() { + var val = escape(field.val()) || options.placeholder; + value.text(val); + } + + preview.find('strong').html(required + ' ' + options.i18n['URL'] + ':'); + preview.find('.slug-preview-prefix').text(options.prefix); + preview.find('button').text(options.i18n['Edit']).click(function (event) { + event.preventDefault(); + element.show(); + preview.hide(); + }); + + setValue(); + field.on('change', setValue); + + element.after(preview).hide(); + + return preview[0]; }); - - setValue(); - field.on('change', setValue); - - element.after(preview).hide(); - - return preview[0]; - }); - - // Append the new elements to the current jQuery stack so that the caller - // can modify the elements. Then restore the originals by calling .end(). - return this.pushStack(collected); + + // Append the new elements to the current jQuery stack so that the caller + // can modify the elements. Then restore the originals by calling .end(). + return this.pushStack(collected); } - + slugPreview.defaults = { - prefix: '', - placeholder: '', - i18n: { - 'URL': 'URL', - 'Edit': 'Edit' - }, - template: [ - '
', - '', - '', - '', - '
' - ].join('\n') + prefix: '', + placeholder: '', + i18n: { + 'URL': 'URL', + 'Edit': 'Edit' + }, + template: [ + '
', + '', + '', + '', + '
' + ].join('\n') }; - + $.fn.slugPreview = slugPreview; - - })(this.jQuery, this); - \ No newline at end of file + +})(this.jQuery, this); \ No newline at end of file diff --git a/ckanext/schemingdcat/assets/vendor/jquery/jquery.js b/ckanext/schemingdcat/assets/vendor/jquery/jquery.js deleted file mode 100644 index 798cc8b..0000000 --- a/ckanext/schemingdcat/assets/vendor/jquery/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0') +@deprecated def index(id): context = { u'model': model, @@ -47,7 +50,7 @@ def index(id): pkg = context[u'package'] schema = get_action(u'package_show')(context, data_dict) except (logic.NotFound, logic.NotAuthorized): - return base.abort(404, _(u'Dataset {dataset} not found').format({dataset:id})) + return base.abort(404, _(u'Dataset {dataset} not found').format(dataset=id)) return render('schemingdcat/custom_data/index.html',extra_vars={ u'pkg_dict': pkg_dict, @@ -55,7 +58,13 @@ def index(id): u'data_list': sdct_utils.get_linked_data(id), }) +from flask import g, render_template as render +from ckan import model, logic +from ckan.lib.base import abort +from ckan.plugins.toolkit import get_action, _ + @schemingdcat.route(u'/dataset/geospatial_metadata/') +@deprecated def geospatial_metadata(id): context = { u'model': model, @@ -71,10 +80,10 @@ def geospatial_metadata(id): pkg_dict = get_action(u'package_show')(context, data_dict) pkg = context[u'package'] except (logic.NotFound, logic.NotAuthorized): - return base.abort(404, _(u'Dataset {dataset} not found').format({dataset:id})) + return base.abort(404, _(u'Dataset {dataset} not found').format(dataset=id)) - return render('schemingdcat/custom_data/index.html',extra_vars={ - u'pkg_dict': pkg_dict, - u'id': id, - u'data_list': sdct_utils.get_geospatial_metadata(), - }) + return render('schemingdcat/custom_data/index.html', extra_vars={ + u'pkg_dict': pkg_dict, + u'id': id, + u'data_list': sdct_utils.get_geospatial_metadata(), + }) diff --git a/ckanext/schemingdcat/cli.py b/ckanext/schemingdcat/cli.py index 4286020..c56d633 100644 --- a/ckanext/schemingdcat/cli.py +++ b/ckanext/schemingdcat/cli.py @@ -5,6 +5,7 @@ import ckantoolkit as tk import click import logging +import requests import ckanext.schemingdcat.utils as utils @@ -12,6 +13,18 @@ import ckanext.scheming.helpers as sh import ckanext.schemingdcat.helpers as helpers +from ckanext.schemingdcat.profiles.dcat_config import ( + EU_VOCABS_DIR, + EU_VOCABULARIES, + headers, + ) +from ckanext.schemingdcat.codelists import ( + BasicRdfFile, + LicenseRdfFile, + FileTypesRdfFile, + MediaTypesRdfFile + ) + log = logging.getLogger(__name__) @@ -189,7 +202,6 @@ def manage_vocab(vocab_name, schema_name="dataset", lang="en", delete=False): else: create_vocab(vocab_name, schema_name, lang) - @schemingdcat.command() @click.option("-l", "--lang", default="en", show_default=True) def create_inspire_tags(lang): @@ -286,4 +298,48 @@ def delete_iso_topic_tags(): Returns: None """ - manage_vocab(sdct_config.SCHEMINGDCAT_ISO19115_TOPICS_VOCAB, sdct_config.SCHEMINGDCAT_DEFAULT_DATASET_SCHEMA_NAME, delete=True) \ No newline at end of file + manage_vocab(sdct_config.SCHEMINGDCAT_ISO19115_TOPICS_VOCAB, sdct_config.SCHEMINGDCAT_DEFAULT_DATASET_SCHEMA_NAME, delete=True) + +@schemingdcat.command() +def download_rdf_eu_vocabs(): + """ + """ + log.info( + "Downloading EU Vocabularies..." + ) + + rdf_files = [] + for rdf_data in EU_VOCABULARIES: + rdf_vocab = rdf_data["name"] + url = rdf_data["url"] + description = rdf_data["description"] + title = rdf_data["title"] + + if rdf_vocab == "access-right": + rdf_files.append(BasicRdfFile(rdf_vocab, url, description, title)) + elif rdf_vocab == "licenses": + rdf_files.append(LicenseRdfFile(rdf_vocab, url, description, title)) + elif rdf_vocab == "file-types": + rdf_files.append(FileTypesRdfFile(rdf_vocab, url, description, title)) + elif rdf_vocab == "media-types": + rdf_files.append(MediaTypesRdfFile(rdf_vocab, url, description, title)) + else: + log.warning(f"Unrecognized RDF vocab '{rdf_vocab}'. Skipping.") + + for rdf_file in rdf_files: + try: + response = requests.get(rdf_file.url, headers=headers, timeout=10) + if response.status_code == 200: + rdf_content = response.text + extracted_data = rdf_file.extract_description(rdf_content, rdf_file.url) + if extracted_data: # Avoid creating CSV if no valid descriptions + file_name = f"{rdf_file.name}.csv" + rdf_file.save_to_csv(extracted_data, EU_VOCABS_DIR / 'csv' / 'download' / file_name) + rdf_file.save_to_rdf(extracted_data, EU_VOCABS_DIR / 'rdf' / 'download' / file_name) + log.info(f"{rdf_file.name} data extracted and saved to {file_name}") + else: + logging.warning(f"Failed to retrieve data for URL: {rdf_file.url}. Status Code: {response.status_code}") + except requests.exceptions.RequestException as e: + log.error(f":An error occurred for URL: {rdf_file.url}. Error: {e}") + + log.info("Done!") \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists.py b/ckanext/schemingdcat/codelists.py new file mode 100644 index 0000000..ce720be --- /dev/null +++ b/ckanext/schemingdcat/codelists.py @@ -0,0 +1,176 @@ +import csv +import requests +from datetime import datetime +from pathlib import Path +import os +import logging + +# third-party libraries +from rdflib import Graph, Namespace, RDF, URIRef, Literal +from xml.etree import ElementTree as ET + +from ckanext.dcat.profiles.base import ( + RDF, + SKOS +) + +from ckanext.schemingdcat.profiles.dcat_config import ( + EU_VOCABS_DIR, + INSPIRE_CODELISTS_DIR, + EUROVOC +) + +log = logging.getLogger(__name__) + + +def load_inspire_csv_codelists(): + # Check if the codelists directory exists + csv_subdir = INSPIRE_CODELISTS_DIR.joinpath("csv") + if csv_subdir.exists() and csv_subdir.is_dir(): + codelist_paths = list(csv_subdir.glob("*.csv")) + else: + codelist_paths = list(INSPIRE_CODELISTS_DIR.glob("*.csv")) + + codelists_dfs = {} + + log.debug('INSPIRE_CODELISTS_DIR: %s', INSPIRE_CODELISTS_DIR) + + # Iterate over file paths and read in data + for file_path in codelist_paths: + with file_path.open("r") as f: + reader = csv.DictReader(f) + df = list(reader) + file_name = file_path.stem.lower() + codelists_dfs[file_name] = df + + # INSPIRE Codelists + MD_INSPIRE_REGISTER = [item for df in codelists_dfs.values() for item in df] + + return { + 'MD_INSPIRE_REGISTER': MD_INSPIRE_REGISTER, + 'MD_FORMAT': codelists_dfs.get('file-type'), + 'MD_ES_THEMES': codelists_dfs.get('theme_es'), + 'MD_EU_THEMES': codelists_dfs.get('theme-dcat_ap'), + 'MD_EU_LANGUAGES': codelists_dfs.get('languages'), + 'MD_ES_FORMATS': codelists_dfs.get('format_es') + } + +class RdfFile: + def __init__(self, name, url, description, title): + self.name = name + self.url = url + self.title = title + self.description = description + + def extract_description(self, rdf_content, rdf_url): + raise NotImplementedError + + def parse_graph(self, rdf_content): + return Graph().parse(data=rdf_content, format='xml') + + def get_label_from_uri(self, uri): + return uri.split('/')[-1] + + def save_to_csv(self, data, filename): + file_path = EU_VOCABS_DIR / 'csv' / filename + # Remove any None elements from the data list + data = [d for d in data if d is not None] + sorted_data = sorted(data, key=lambda x: x[1]) # Sort by label (2nd column) + # Open the file in write mode, which will overwrite the file if it exists + with open(file_path, 'w', newline='', encoding='utf-8') as csvfile: + writer = csv.writer(csvfile) + writer.writerows(sorted_data) + log.info(f"Data extracted and saved to {file_path}") + + def download_rdf(self, rdf_url): + try: + response = requests.get(rdf_url) + response.raise_for_status() + log.info(f"Successfully downloaded RDF from {rdf_url}") + return response.content + except requests.RequestException as e: + log.error(f"Failed to download RDF from {rdf_url}: {e}") + return None + + def save_to_rdf(self, data, filename): + graph = Graph() + for item in data: + uri = URIRef(item[0]) + label = Literal(item[1]) + graph.add((uri, RDF.type, SKOS.Concept)) + graph.add((uri, SKOS.prefLabel, label)) + if len(item) > 2: + eu_uri = URIRef(item[2]) + graph.add((uri, SKOS.exactMatch, eu_uri)) + + file_path = f"{filename}.rdf" + graph.serialize(destination=file_path, format='xml') + log.info(f"Data saved to RDF file at {file_path}") + +class BasicRdfFile(RdfFile): + def extract_description(self, rdf_content, rdf_url): + graph = self.parse_graph(rdf_content) + data = set() + + for concept in graph.subjects(): + uri = str(concept) + label = self.get_label_from_uri(uri) + if uri != rdf_url and label != self.get_label_from_uri(rdf_url): + data.add((uri, label)) + + return data + +class LicenseRdfFile(RdfFile): + def extract_description(self, rdf_content, rdf_url): + graph = self.parse_graph(rdf_content) + data = set() + + for concept in graph.subjects(RDF.type, SKOS.Concept): + label = self.get_label_from_uri(concept) + eu_uri = concept + uri = str(graph.value(concept, SKOS.exactMatch, default=eu_uri)) + if concept != rdf_url and label != self.get_label_from_uri(rdf_url): + data.add((uri, label, eu_uri)) + + return data + +class FileTypesRdfFile(RdfFile): + def extract_description(self, rdf_content, rdf_url): + graph = self.parse_graph(rdf_content) + data = set() + non_proprietary_data = set() + machine_readable_data = set() + + for concept in graph.subjects(RDF.type, EUROVOC.FileType): + uri = str(concept) + label = self.get_label_from_uri(uri) + non_prop_ext = str(graph.value(concept, EUROVOC.nonPropExt, default="false")) + + if uri != rdf_url and label != self.get_label_from_uri(rdf_url): + data.add((uri, label, non_prop_ext)) + machine_readable_data.add((uri, label)) + if non_prop_ext == "true": + non_proprietary_data.add((uri, label)) + + self.save_to_csv(non_proprietary_data, "non-propietary.csv") + self.save_to_csv(machine_readable_data, "machine-readable.csv") + + return data + +class MediaTypesRdfFile(RdfFile): + def extract_description(self, xml_content, rdf_url): + data = set() + tree = ET.ElementTree(ET.fromstring(xml_content)) + root = tree.getroot() + + for record in root.findall(".//{http://www.iana.org/assignments}record"): + name_elem = record.find("{http://www.iana.org/assignments}file") + name = name_elem.text if name_elem is not None else "" + label_elem = record.find("{http://www.iana.org/assignments}file") + label = label_elem.text if label_elem is not None else "" + + if name != self.get_label_from_uri(rdf_url): + uri = f"http://www.iana.org/assignments/media-types/{name}" + data.add((uri, label)) + + return data \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/dcat/csv/download/access-right.csv b/ckanext/schemingdcat/codelists/dcat/csv/download/access-right.csv new file mode 100644 index 0000000..31f1c57 --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/csv/download/access-right.csv @@ -0,0 +1,7 @@ +http://publications.europa.eu/resource/authority/access-right/CONFIDENTIAL,CONFIDENTIAL +http://publications.europa.eu/resource/authority/access-right/NON_PUBLIC,NON_PUBLIC +http://publications.europa.eu/resource/authority/access-right/NORMAL,NORMAL +http://publications.europa.eu/resource/authority/access-right/OP_DATPRO,OP_DATPRO +http://publications.europa.eu/resource/authority/access-right/PUBLIC,PUBLIC +http://publications.europa.eu/resource/authority/access-right/RESTRICTED,RESTRICTED +http://publications.europa.eu/resource/authority/access-right/SENSITIVE,SENSITIVE diff --git a/ckanext/schemingdcat/codelists/dcat/csv/download/file-types.csv b/ckanext/schemingdcat/codelists/dcat/csv/download/file-types.csv new file mode 100644 index 0000000..cbeba1f --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/csv/download/file-types.csv @@ -0,0 +1,215 @@ +http://publications.europa.eu/resource/authority/file-type/7Z,7Z,false +http://publications.europa.eu/resource/authority/file-type/AAB,AAB,false +http://publications.europa.eu/resource/authority/file-type/AAC,AAC,false +http://publications.europa.eu/resource/authority/file-type/AKN4EU,AKN4EU,false +http://publications.europa.eu/resource/authority/file-type/AKN4EU_ZIP,AKN4EU_ZIP,false +http://publications.europa.eu/resource/authority/file-type/APK,APK,false +http://publications.europa.eu/resource/authority/file-type/APPX,APPX,false +http://publications.europa.eu/resource/authority/file-type/ARC,ARC,false +http://publications.europa.eu/resource/authority/file-type/ARCINFO_COV,ARCINFO_COV,false +http://publications.europa.eu/resource/authority/file-type/ARC_GZ,ARC_GZ,false +http://publications.europa.eu/resource/authority/file-type/ARJ,ARJ,false +http://publications.europa.eu/resource/authority/file-type/ARROW_FILE,ARROW_FILE,false +http://publications.europa.eu/resource/authority/file-type/ARROW_STREAM,ARROW_STREAM,false +http://publications.europa.eu/resource/authority/file-type/ATOM,ATOM,false +http://publications.europa.eu/resource/authority/file-type/AZW,AZW,false +http://publications.europa.eu/resource/authority/file-type/BIN,BIN,false +http://publications.europa.eu/resource/authority/file-type/BITS,BITS,false +http://publications.europa.eu/resource/authority/file-type/BMP,BMP,true +http://publications.europa.eu/resource/authority/file-type/BWF,BWF,false +http://publications.europa.eu/resource/authority/file-type/BZIP2,BZIP2,false +http://publications.europa.eu/resource/authority/file-type/CSS,CSS,false +http://publications.europa.eu/resource/authority/file-type/CSV,CSV,true +http://publications.europa.eu/resource/authority/file-type/DAPK,DAPK,false +http://publications.europa.eu/resource/authority/file-type/DBF,DBF,true +http://publications.europa.eu/resource/authority/file-type/DCR,DCR,false +http://publications.europa.eu/resource/authority/file-type/DEB,DEB,false +http://publications.europa.eu/resource/authority/file-type/DGN,DGN,false +http://publications.europa.eu/resource/authority/file-type/DMG,DMG,false +http://publications.europa.eu/resource/authority/file-type/DMP,DMP,false +http://publications.europa.eu/resource/authority/file-type/DOC,DOC,false +http://publications.europa.eu/resource/authority/file-type/DOCX,DOCX,false +http://publications.europa.eu/resource/authority/file-type/DTD_SGML,DTD_SGML,false +http://publications.europa.eu/resource/authority/file-type/DTD_XML,DTD_XML,false +http://publications.europa.eu/resource/authority/file-type/DWCA,DWCA,false +http://publications.europa.eu/resource/authority/file-type/DWG,DWG,false +http://publications.europa.eu/resource/authority/file-type/DXF,DXF,false +http://publications.europa.eu/resource/authority/file-type/E00,E00,false +http://publications.europa.eu/resource/authority/file-type/EAR,EAR,false +http://publications.europa.eu/resource/authority/file-type/ECW,ECW,false +http://publications.europa.eu/resource/authority/file-type/EFORMS_XML,EFORMS_XML,false +http://publications.europa.eu/resource/authority/file-type/EPS,EPS,false +http://publications.europa.eu/resource/authority/file-type/EPUB,EPUB,false +http://publications.europa.eu/resource/authority/file-type/ETSI_TSL,ETSI_TSL,false +http://publications.europa.eu/resource/authority/file-type/ETSI_XML,ETSI_XML,true +http://publications.europa.eu/resource/authority/file-type/EXE,EXE,false +http://publications.europa.eu/resource/authority/file-type/FMX2,FMX2,false +http://publications.europa.eu/resource/authority/file-type/FMX3,FMX3,false +http://publications.europa.eu/resource/authority/file-type/FMX4,FMX4,false +http://publications.europa.eu/resource/authority/file-type/FMX4_ZIP,FMX4_ZIP,false +http://publications.europa.eu/resource/authority/file-type/GDB,GDB,false +http://publications.europa.eu/resource/authority/file-type/GEOJSON,GEOJSON,true +http://publications.europa.eu/resource/authority/file-type/GEOTIFF,GEOTIFF,false +http://publications.europa.eu/resource/authority/file-type/GIF,GIF,false +http://publications.europa.eu/resource/authority/file-type/GML,GML,false +http://publications.europa.eu/resource/authority/file-type/GMZ,GMZ,false +http://publications.europa.eu/resource/authority/file-type/GPKG,GPKG,true +http://publications.europa.eu/resource/authority/file-type/GPX,GPX,true +http://publications.europa.eu/resource/authority/file-type/GRID,GRID,false +http://publications.europa.eu/resource/authority/file-type/GRID_ASCII,GRID_ASCII,false +http://publications.europa.eu/resource/authority/file-type/GTFS,GTFS,false +http://publications.europa.eu/resource/authority/file-type/GZIP,GZIP,true +http://publications.europa.eu/resource/authority/file-type/HDF,HDF,false +http://publications.europa.eu/resource/authority/file-type/HDT,HDT,false +http://publications.europa.eu/resource/authority/file-type/HTML,HTML,true +http://publications.europa.eu/resource/authority/file-type/HTML5,HTML5,false +http://publications.europa.eu/resource/authority/file-type/HTML_SIMPL,HTML_SIMPL,false +http://publications.europa.eu/resource/authority/file-type/ICS,ICS,true +http://publications.europa.eu/resource/authority/file-type/IMMC_XML,IMMC_XML,false +http://publications.europa.eu/resource/authority/file-type/INDD,INDD,false +http://publications.europa.eu/resource/authority/file-type/IPA,IPA,false +http://publications.europa.eu/resource/authority/file-type/ISO,ISO,false +http://publications.europa.eu/resource/authority/file-type/ISO_ZIP,ISO_ZIP,false +http://publications.europa.eu/resource/authority/file-type/JAR,JAR,false +http://publications.europa.eu/resource/authority/file-type/JATS,JATS,false +http://publications.europa.eu/resource/authority/file-type/JPEG,JPEG,false +http://publications.europa.eu/resource/authority/file-type/JPEG2000,JPEG2000,true +http://publications.europa.eu/resource/authority/file-type/JS,JS,false +http://publications.europa.eu/resource/authority/file-type/JSON,JSON,true +http://publications.europa.eu/resource/authority/file-type/JSON_LD,JSON_LD,true +http://publications.europa.eu/resource/authority/file-type/KML,KML,true +http://publications.europa.eu/resource/authority/file-type/KMZ,KMZ,true +http://publications.europa.eu/resource/authority/file-type/LAS,LAS,false +http://publications.europa.eu/resource/authority/file-type/LAZ,LAZ,false +http://publications.europa.eu/resource/authority/file-type/LEG,LEG,false +http://publications.europa.eu/resource/authority/file-type/LEGALHTML,LEGALHTML,false +http://publications.europa.eu/resource/authority/file-type/LHA,LHA,false +http://publications.europa.eu/resource/authority/file-type/LPK,LPK,false +http://publications.europa.eu/resource/authority/file-type/LZIP,LZIP,false +http://publications.europa.eu/resource/authority/file-type/LZMA,LZMA,false +http://publications.europa.eu/resource/authority/file-type/LZO,LZO,false +http://publications.europa.eu/resource/authority/file-type/MAP_PRVW,MAP_PRVW,false +http://publications.europa.eu/resource/authority/file-type/MAP_SRVC,MAP_SRVC,false +http://publications.europa.eu/resource/authority/file-type/MARKDOWN,MARKDOWN,false +http://publications.europa.eu/resource/authority/file-type/MATHML,MATHML,false +http://publications.europa.eu/resource/authority/file-type/MBOX,MBOX,false +http://publications.europa.eu/resource/authority/file-type/MDB,MDB,false +http://publications.europa.eu/resource/authority/file-type/METS,METS,false +http://publications.europa.eu/resource/authority/file-type/METS_ZIP,METS_ZIP,false +http://publications.europa.eu/resource/authority/file-type/MHTML,MHTML,false +http://publications.europa.eu/resource/authority/file-type/MIF_MID,MIF_MID,false +http://publications.europa.eu/resource/authority/file-type/MOBI,MOBI,false +http://publications.europa.eu/resource/authority/file-type/MOP,MOP,false +http://publications.europa.eu/resource/authority/file-type/MOV,MOV,false +http://publications.europa.eu/resource/authority/file-type/MP3,MP3,false +http://publications.europa.eu/resource/authority/file-type/MPEG2,MPEG2,false +http://publications.europa.eu/resource/authority/file-type/MPEG4,MPEG4,false +http://publications.europa.eu/resource/authority/file-type/MPEG4_AVC,MPEG4_AVC,false +http://publications.europa.eu/resource/authority/file-type/MRSID,MRSID,false +http://publications.europa.eu/resource/authority/file-type/MSG_HTTP,MSG_HTTP,false +http://publications.europa.eu/resource/authority/file-type/MSI,MSI,false +http://publications.europa.eu/resource/authority/file-type/MXD,MXD,false +http://publications.europa.eu/resource/authority/file-type/N3,N3,false +http://publications.europa.eu/resource/authority/file-type/NETCDF,NETCDF,true +http://publications.europa.eu/resource/authority/file-type/OAPK,OAPK,false +http://publications.europa.eu/resource/authority/file-type/OCTET,OCTET,false +http://publications.europa.eu/resource/authority/file-type/ODB,ODB,false +http://publications.europa.eu/resource/authority/file-type/ODC,ODC,false +http://publications.europa.eu/resource/authority/file-type/ODF,ODF,false +http://publications.europa.eu/resource/authority/file-type/ODG,ODG,false +http://publications.europa.eu/resource/authority/file-type/ODP,ODP,false +http://publications.europa.eu/resource/authority/file-type/ODS,ODS,true +http://publications.europa.eu/resource/authority/file-type/ODT,ODT,false +http://publications.europa.eu/resource/authority/file-type/OP_DATPRO,OP_DATPRO,false +http://publications.europa.eu/resource/authority/file-type/OVF,OVF,false +http://publications.europa.eu/resource/authority/file-type/OWL,OWL,false +http://publications.europa.eu/resource/authority/file-type/PARQUET,PARQUET,false +http://publications.europa.eu/resource/authority/file-type/PDF,PDF,false +http://publications.europa.eu/resource/authority/file-type/PDF1X,PDF1X,false +http://publications.europa.eu/resource/authority/file-type/PDFA1A,PDFA1A,false +http://publications.europa.eu/resource/authority/file-type/PDFA1B,PDFA1B,false +http://publications.europa.eu/resource/authority/file-type/PDFA2A,PDFA2A,false +http://publications.europa.eu/resource/authority/file-type/PDFA2B,PDFA2B,false +http://publications.europa.eu/resource/authority/file-type/PDFA3,PDFA3,false +http://publications.europa.eu/resource/authority/file-type/PDFUA,PDFUA,false +http://publications.europa.eu/resource/authority/file-type/PDFX,PDFX,false +http://publications.europa.eu/resource/authority/file-type/PDFX1A,PDFX1A,false +http://publications.europa.eu/resource/authority/file-type/PDFX2A,PDFX2A,false +http://publications.europa.eu/resource/authority/file-type/PDFX4,PDFX4,false +http://publications.europa.eu/resource/authority/file-type/PL,PL,false +http://publications.europa.eu/resource/authority/file-type/PNG,PNG,true +http://publications.europa.eu/resource/authority/file-type/PPS,PPS,false +http://publications.europa.eu/resource/authority/file-type/PPSX,PPSX,false +http://publications.europa.eu/resource/authority/file-type/PPT,PPT,false +http://publications.europa.eu/resource/authority/file-type/PPTX,PPTX,false +http://publications.europa.eu/resource/authority/file-type/PS,PS,false +http://publications.europa.eu/resource/authority/file-type/PSD,PSD,false +http://publications.europa.eu/resource/authority/file-type/PWP,PWP,false +http://publications.europa.eu/resource/authority/file-type/QGS,QGS,false +http://publications.europa.eu/resource/authority/file-type/RAR,RAR,false +http://publications.europa.eu/resource/authority/file-type/RDF,RDF,false +http://publications.europa.eu/resource/authority/file-type/RDFA,RDFA,false +http://publications.europa.eu/resource/authority/file-type/RDF_N_QUADS,RDF_N_QUADS,true +http://publications.europa.eu/resource/authority/file-type/RDF_N_TRIPLES,RDF_N_TRIPLES,true +http://publications.europa.eu/resource/authority/file-type/RDF_THRIFT,RDF_THRIFT,false +http://publications.europa.eu/resource/authority/file-type/RDF_TRIG,RDF_TRIG,true +http://publications.europa.eu/resource/authority/file-type/RDF_TRIX,RDF_TRIX,false +http://publications.europa.eu/resource/authority/file-type/RDF_TURTLE,RDF_TURTLE,true +http://publications.europa.eu/resource/authority/file-type/RDF_XML,RDF_XML,true +http://publications.europa.eu/resource/authority/file-type/REST,REST,false +http://publications.europa.eu/resource/authority/file-type/RPM,RPM,false +http://publications.europa.eu/resource/authority/file-type/RSS,RSS,true +http://publications.europa.eu/resource/authority/file-type/RTF,RTF,true +http://publications.europa.eu/resource/authority/file-type/SB3,SB3,false +http://publications.europa.eu/resource/authority/file-type/SCHEMA_XML,SCHEMA_XML,false +http://publications.europa.eu/resource/authority/file-type/SDMX,SDMX,false +http://publications.europa.eu/resource/authority/file-type/SGML,SGML,false +http://publications.europa.eu/resource/authority/file-type/SHP,SHP,false +http://publications.europa.eu/resource/authority/file-type/SKOS_XML,SKOS_XML,false +http://publications.europa.eu/resource/authority/file-type/SPARQLQ,SPARQLQ,false +http://publications.europa.eu/resource/authority/file-type/SPARQLQRES,SPARQLQRES,false +http://publications.europa.eu/resource/authority/file-type/SQL,SQL,false +http://publications.europa.eu/resource/authority/file-type/STL,STL,false +http://publications.europa.eu/resource/authority/file-type/SVG,SVG,false +http://publications.europa.eu/resource/authority/file-type/SWM,SWM,false +http://publications.europa.eu/resource/authority/file-type/TAB,TAB,false +http://publications.europa.eu/resource/authority/file-type/TAB_RSTR,TAB_RSTR,false +http://publications.europa.eu/resource/authority/file-type/TAR,TAR,true +http://publications.europa.eu/resource/authority/file-type/TAR_GZ,TAR_GZ,false +http://publications.europa.eu/resource/authority/file-type/TAR_XZ,TAR_XZ,false +http://publications.europa.eu/resource/authority/file-type/THRIFT_BINARY,THRIFT_BINARY,false +http://publications.europa.eu/resource/authority/file-type/THRIFT_COMPACT,THRIFT_COMPACT,false +http://publications.europa.eu/resource/authority/file-type/THRIFT_JSON,THRIFT_JSON,false +http://publications.europa.eu/resource/authority/file-type/TIFF,TIFF,true +http://publications.europa.eu/resource/authority/file-type/TIFF_FX,TIFF_FX,false +http://publications.europa.eu/resource/authority/file-type/TMX,TMX,false +http://publications.europa.eu/resource/authority/file-type/TSV,TSV,true +http://publications.europa.eu/resource/authority/file-type/TXT,TXT,true +http://publications.europa.eu/resource/authority/file-type/UNGEN,UNGEN,false +http://publications.europa.eu/resource/authority/file-type/WAR,WAR,false +http://publications.europa.eu/resource/authority/file-type/WARC,WARC,false +http://publications.europa.eu/resource/authority/file-type/WARC_GZ,WARC_GZ,false +http://publications.europa.eu/resource/authority/file-type/WAV,WAV,false +http://publications.europa.eu/resource/authority/file-type/WCS_SRVC,WCS_SRVC,false +http://publications.europa.eu/resource/authority/file-type/WEBP,WEBP,false +http://publications.europa.eu/resource/authority/file-type/WFS_SRVC,WFS_SRVC,false +http://publications.europa.eu/resource/authority/file-type/WIM,WIM,false +http://publications.europa.eu/resource/authority/file-type/WMS_SRVC,WMS_SRVC,true +http://publications.europa.eu/resource/authority/file-type/WMTS_SRVC,WMTS_SRVC,false +http://publications.europa.eu/resource/authority/file-type/WORLD,WORLD,false +http://publications.europa.eu/resource/authority/file-type/XHTML,XHTML,false +http://publications.europa.eu/resource/authority/file-type/XHTML5,XHTML5,false +http://publications.europa.eu/resource/authority/file-type/XHTML_SIMPL,XHTML_SIMPL,false +http://publications.europa.eu/resource/authority/file-type/XLIFF,XLIFF,false +http://publications.europa.eu/resource/authority/file-type/XLS,XLS,false +http://publications.europa.eu/resource/authority/file-type/XLSB,XLSB,false +http://publications.europa.eu/resource/authority/file-type/XLSM,XLSM,false +http://publications.europa.eu/resource/authority/file-type/XLSX,XLSX,false +http://publications.europa.eu/resource/authority/file-type/XML,XML,true +http://publications.europa.eu/resource/authority/file-type/XSLFO,XSLFO,false +http://publications.europa.eu/resource/authority/file-type/XSLT,XSLT,false +http://publications.europa.eu/resource/authority/file-type/XYZ,XYZ,false +http://publications.europa.eu/resource/authority/file-type/XZ,XZ,false +http://publications.europa.eu/resource/authority/file-type/YAML,YAML,false +http://publications.europa.eu/resource/authority/file-type/Z,Z,false +http://publications.europa.eu/resource/authority/file-type/ZIP,ZIP,true diff --git a/ckanext/schemingdcat/codelists/dcat/csv/download/licenses.csv b/ckanext/schemingdcat/codelists/dcat/csv/download/licenses.csv new file mode 100644 index 0000000..7a5c4d0 --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/csv/download/licenses.csv @@ -0,0 +1,160 @@ +https://opensource.org/licenses/0BSD,0BSD,http://publications.europa.eu/resource/authority/licence/0BSD +https://opensource.org/licenses/AGPL-3.0,AGPL_3_0,http://publications.europa.eu/resource/authority/licence/AGPL_3_0 +https://opensource.org/licenses/Apache-1.1,APACHE_1_1,http://publications.europa.eu/resource/authority/licence/APACHE_1_1 +https://opensource.org/licenses/Apache-2.0,APACHE_2_0,http://publications.europa.eu/resource/authority/licence/APACHE_2_0 +https://opensource.org/licenses/APL-1.0,APL_1_0,http://publications.europa.eu/resource/authority/licence/APL_1_0 +https://opensource.org/licenses/APSL-2.0,APSL_2_0,http://publications.europa.eu/resource/authority/licence/APSL_2_0 +https://opensource.org/licenses/Artistic-1.0,ARTISTIC_1_0,http://publications.europa.eu/resource/authority/licence/ARTISTIC_1_0 +https://opensource.org/licenses/Artistic-2.0,ARTISTIC_2_0,http://publications.europa.eu/resource/authority/licence/ARTISTIC_2_0 +https://opensource.org/licenses/BSD-2-Clause,BSD_2_CLAUSE,http://publications.europa.eu/resource/authority/licence/BSD_2_CLAUSE +https://opensource.org/licenses/BSD-3-Clause,BSD_3_CLAUSE,http://publications.europa.eu/resource/authority/licence/BSD_3_CLAUSE +https://opensource.org/licenses/BSD-3-Clause-LBNL,BSD_3_CLAUSE_LBNL,http://publications.europa.eu/resource/authority/licence/BSD_3_CLAUSE_LBNL +https://opensource.org/licenses/BSDplusPatent,BSD_PLUS_PATENT,http://publications.europa.eu/resource/authority/licence/BSD_PLUS_PATENT +https://opensource.org/licenses/BSL-1.0,BSL_1_0,http://publications.europa.eu/resource/authority/licence/BSL_1_0 +https://opensource.org/licenses/CATOSL-1.1,CATOSL_1_1,http://publications.europa.eu/resource/authority/licence/CATOSL_1_1 +http://creativecommons.org/publicdomain/zero/1.0/,CC0,http://publications.europa.eu/resource/authority/licence/CC0 +http://publications.europa.eu/resource/authority/licence/CC_BY,CC_BY,http://publications.europa.eu/resource/authority/licence/CC_BY +http://publications.europa.eu/resource/authority/licence/CC_BYNC,CC_BYNC,http://publications.europa.eu/resource/authority/licence/CC_BYNC +http://publications.europa.eu/resource/authority/licence/CC_BYNCND,CC_BYNCND,http://publications.europa.eu/resource/authority/licence/CC_BYNCND +http://creativecommons.org/licenses/by-nd-nc/1.0/,CC_BYNCND_1_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCND_1_0 +http://creativecommons.org/licenses/by-nc-nd/2.0/,CC_BYNCND_2_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCND_2_0 +http://creativecommons.org/licenses/by-nc-nd/2.5/,CC_BYNCND_2_5,http://publications.europa.eu/resource/authority/licence/CC_BYNCND_2_5 +http://creativecommons.org/licenses/by-nc-nd/3.0/,CC_BYNCND_3_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCND_3_0 +http://creativecommons.org/licenses/by-nc-nd/4.0/,CC_BYNCND_4_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCND_4_0 +http://publications.europa.eu/resource/authority/licence/CC_BYNCSA,CC_BYNCSA,http://publications.europa.eu/resource/authority/licence/CC_BYNCSA +http://creativecommons.org/licenses/by-nc-sa/1.0/,CC_BYNCSA_1_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCSA_1_0 +http://creativecommons.org/licenses/by-nc-sa/2.0/,CC_BYNCSA_2_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCSA_2_0 +http://creativecommons.org/licenses/by-nc-sa/2.5/,CC_BYNCSA_2_5,http://publications.europa.eu/resource/authority/licence/CC_BYNCSA_2_5 +http://creativecommons.org/licenses/by-nc-sa/3.0/,CC_BYNCSA_3_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCSA_3_0 +http://creativecommons.org/licenses/by-nc-sa/4.0/,CC_BYNCSA_4_0,http://publications.europa.eu/resource/authority/licence/CC_BYNCSA_4_0 +http://creativecommons.org/licenses/by-nc/1.0/,CC_BYNC_1_0,http://publications.europa.eu/resource/authority/licence/CC_BYNC_1_0 +http://creativecommons.org/licenses/by-nc/2.0/,CC_BYNC_2_0,http://publications.europa.eu/resource/authority/licence/CC_BYNC_2_0 +http://creativecommons.org/licenses/by-nc/2.5/,CC_BYNC_2_5,http://publications.europa.eu/resource/authority/licence/CC_BYNC_2_5 +http://creativecommons.org/licenses/by-nc/3.0/,CC_BYNC_3_0,http://publications.europa.eu/resource/authority/licence/CC_BYNC_3_0 +http://creativecommons.org/licenses/by-nc/4.0/,CC_BYNC_4_0,http://publications.europa.eu/resource/authority/licence/CC_BYNC_4_0 +http://publications.europa.eu/resource/authority/licence/CC_BYND,CC_BYND,http://publications.europa.eu/resource/authority/licence/CC_BYND +http://creativecommons.org/licenses/by-nd/1.0/,CC_BYND_1_0,http://publications.europa.eu/resource/authority/licence/CC_BYND_1_0 +http://creativecommons.org/licenses/by-nd/2.0/,CC_BYND_2_0,http://publications.europa.eu/resource/authority/licence/CC_BYND_2_0 +http://creativecommons.org/licenses/by-nd/2.5/,CC_BYND_2_5,http://publications.europa.eu/resource/authority/licence/CC_BYND_2_5 +http://creativecommons.org/licenses/by-nd/3.0/,CC_BYND_3_0,http://publications.europa.eu/resource/authority/licence/CC_BYND_3_0 +http://creativecommons.org/licenses/by-nd/4.0/,CC_BYND_4_0,http://publications.europa.eu/resource/authority/licence/CC_BYND_4_0 +http://publications.europa.eu/resource/authority/licence/CC_BYSA,CC_BYSA,http://publications.europa.eu/resource/authority/licence/CC_BYSA +http://creativecommons.org/licenses/by-sa/1.0/,CC_BYSA_1_0,http://publications.europa.eu/resource/authority/licence/CC_BYSA_1_0 +http://creativecommons.org/licenses/by-sa/2.0/,CC_BYSA_2_0,http://publications.europa.eu/resource/authority/licence/CC_BYSA_2_0 +http://creativecommons.org/licenses/by-sa/2.5/,CC_BYSA_2_5,http://publications.europa.eu/resource/authority/licence/CC_BYSA_2_5 +http://creativecommons.org/licenses/by-sa/3.0/,CC_BYSA_3_0,http://publications.europa.eu/resource/authority/licence/CC_BYSA_3_0 +http://creativecommons.org/licenses/by-sa/3.0/nl/legalcode/,CC_BYSA_3_0_NL,http://publications.europa.eu/resource/authority/licence/CC_BYSA_3_0_NL +http://creativecommons.org/licenses/by-sa/4.0/,CC_BYSA_4_0,http://publications.europa.eu/resource/authority/licence/CC_BYSA_4_0 +http://creativecommons.org/licenses/by/1.0/,CC_BY_1_0,http://publications.europa.eu/resource/authority/licence/CC_BY_1_0 +http://creativecommons.org/licenses/by/2.0/,CC_BY_2_0,http://publications.europa.eu/resource/authority/licence/CC_BY_2_0 +http://creativecommons.org/licenses/by/2.5/,CC_BY_2_5,http://publications.europa.eu/resource/authority/licence/CC_BY_2_5 +http://creativecommons.org/licenses/by/3.0/,CC_BY_3_0,http://publications.europa.eu/resource/authority/licence/CC_BY_3_0 +https://creativecommons.org/licenses/by/3.0/at/legalcode,CC_BY_3_0_AT,http://publications.europa.eu/resource/authority/licence/CC_BY_3_0_AT +http://creativecommons.org/licenses/by/3.0/nl/legalcode,CC_BY_3_0_NL,http://publications.europa.eu/resource/authority/licence/CC_BY_3_0_NL +http://creativecommons.org/licenses/by/4.0/,CC_BY_4_0,http://publications.europa.eu/resource/authority/licence/CC_BY_4_0 +http://creativecommons.org/publicdomain/mark/1.0/,CC_PDM_1_0,http://publications.europa.eu/resource/authority/licence/CC_PDM_1_0 +https://opensource.org/licenses/CDDL-1.0,CDDL_1_0,http://publications.europa.eu/resource/authority/licence/CDDL_1_0 +https://opensource.org/licenses/CECILL-2.1,CECILL_2_1,http://publications.europa.eu/resource/authority/licence/CECILL_2_1 +https://www.clarin.eu/content/licenses-and-clarin-categories,CLARIN_ACA_1_0,http://publications.europa.eu/resource/authority/licence/CLARIN_ACA_1_0 +https://opensource.org/licenses/CNRI-Python,CNRI_PYTHON,http://publications.europa.eu/resource/authority/licence/CNRI_PYTHON +http://data.europa.eu/eli/dec/2011/833/oj,COM_REUSE,http://publications.europa.eu/resource/authority/licence/COM_REUSE +https://opensource.org/licenses/CPAL-1.0,CPAL_1_0,http://publications.europa.eu/resource/authority/licence/CPAL_1_0 +https://opensource.org/licenses/CPL-1.0,CPL_1_0,http://publications.europa.eu/resource/authority/licence/CPL_1_0 +https://www.govdata.de/dl-de/by-nc-1-0,DLDE_BYNC_1_0,http://publications.europa.eu/resource/authority/licence/DLDE_BYNC_1_0 +https://www.govdata.de/dl-de/by-1-0,DLDE_BY_1_0,http://publications.europa.eu/resource/authority/licence/DLDE_BY_1_0 +https://www.govdata.de/dl-de/by-2-0,DLDE_BY_2_0,http://publications.europa.eu/resource/authority/licence/DLDE_BY_2_0 +https://www.govdata.de/dl-de/by-2-0,DLDE_ZERO_2_0,http://publications.europa.eu/resource/authority/licence/DLDE_ZERO_2_0 +https://opensource.org/licenses/ECL-1.0,ECL_1_0,http://publications.europa.eu/resource/authority/licence/ECL_1_0 +https://opensource.org/licenses/ECL-2.0,ECL_2_0,http://publications.europa.eu/resource/authority/licence/ECL_2_0 +https://opensource.org/licenses/eCos-2.0,ECOS_2_0,http://publications.europa.eu/resource/authority/licence/ECOS_2_0 +https://opensource.org/licenses/EFL-1.0,EFL_1_0,http://publications.europa.eu/resource/authority/licence/EFL_1_0 +https://opensource.org/licenses/EFL-2.0,EFL_2,http://publications.europa.eu/resource/authority/licence/EFL_2 +https://opensource.org/licenses/Entessa,ENTESSA,http://publications.europa.eu/resource/authority/licence/ENTESSA +https://opensource.org/licenses/EPL-1.0,EPL_1_0,http://publications.europa.eu/resource/authority/licence/EPL_1_0 +https://opensource.org/licenses/EPL-2.0,EPL_2_0,http://publications.europa.eu/resource/authority/licence/EPL_2_0 +https://www.etalab.gouv.fr/licence-ouverte-open-licence/,ETALAB_2_0,http://publications.europa.eu/resource/authority/licence/ETALAB_2_0 +http://ec.europa.eu/idabc/en/document/7330.html,EUPL_1_0,http://publications.europa.eu/resource/authority/licence/EUPL_1_0 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-11-12,EUPL_1_1,http://publications.europa.eu/resource/authority/licence/EUPL_1_1 +https://joinup.ec.europa.eu/collection/eupl/eupl-text-11-12,EUPL_1_2,http://publications.europa.eu/resource/authority/licence/EUPL_1_2 +https://www.mapsforeurope.org/licence,EUROGEO_2022,http://publications.europa.eu/resource/authority/licence/EUROGEO_2022 +https://opensource.org/licenses/EUDatagrid,EU_DATAGRID,http://publications.europa.eu/resource/authority/licence/EU_DATAGRID +https://opensource.org/licenses/Fair,FAIR,http://publications.europa.eu/resource/authority/licence/FAIR +https://opensource.org/licenses/Frameworx-1.0,FRAMEWORX_1_0,http://publications.europa.eu/resource/authority/licence/FRAMEWORX_1_0 +http://www.gnu.org/licenses/licenses.html,GNU_FDL,http://publications.europa.eu/resource/authority/licence/GNU_FDL +https://gnu.org/licenses/old-licenses/fdl-1.1,GNU_FDL_1_1,http://publications.europa.eu/resource/authority/licence/GNU_FDL_1_1 +ttps://gnu.org/licenses/old-licenses/fdl-1.2,GNU_FDL_1_2,http://publications.europa.eu/resource/authority/licence/GNU_FDL_1_2 +http://www.gnu.org/licenses/licenses.html,GNU_FDL_1_3,http://publications.europa.eu/resource/authority/licence/GNU_FDL_1_3 +https://opensource.org/licenses/GPL-2.0,GPL_2_0,http://publications.europa.eu/resource/authority/licence/GPL_2_0 +https://opensource.org/licenses/GPL-3.0,GPL_3_0,http://publications.europa.eu/resource/authority/licence/GPL_3_0 +https://opensource.org/licenses/HPND,HPND,http://publications.europa.eu/resource/authority/licence/HPND +http://data.gov.hr/open-licence-republic-croatia,HROD,http://publications.europa.eu/resource/authority/licence/HROD +http://www.formez.it/iodl/,IODL_1_0,http://publications.europa.eu/resource/authority/licence/IODL_1_0 +https://www.dati.gov.it/content/italian-open-data-license-v20,IODL_2_0,http://publications.europa.eu/resource/authority/licence/IODL_2_0 +https://opensource.org/licenses/IPA,IPA,http://publications.europa.eu/resource/authority/licence/IPA +https://opensource.org/licenses/IPL-1.0,IPL_1_0,http://publications.europa.eu/resource/authority/licence/IPL_1_0 +https://joinup.ec.europa.eu/licence/isa-open-metadata-licence-v11,ISA_OML,http://publications.europa.eu/resource/authority/licence/ISA_OML +https://joinup.ec.europa.eu/licence/isa-open-metadata-licence-v11,ISA_OML_1_1,http://publications.europa.eu/resource/authority/licence/ISA_OML_1_1 +https://opensource.org/licenses/ISC,ISC,http://publications.europa.eu/resource/authority/licence/ISC +https://opensource.org/licenses/LGPL-2.1,LGPL_2_1,http://publications.europa.eu/resource/authority/licence/LGPL_2_1 +https://opensource.org/licenses/LGPL-3.0,LGPL_3_0,http://publications.europa.eu/resource/authority/licence/LGPL_3_0 +https://opensource.org/licenses/LiLiQ-P-1.1,LILIQ_P_1_1,http://publications.europa.eu/resource/authority/licence/LILIQ_P_1_1 +https://opensource.org/licenses/LiLiQ-Rplus-1.1,LILIQ_RPLUS_1_1,http://publications.europa.eu/resource/authority/licence/LILIQ_RPLUS_1_1 +https://opensource.org/licenses/LiLiQ-R-1.1,LILIQ_R_1_1,http://publications.europa.eu/resource/authority/licence/LILIQ_R_1_1 +https://opensource.org/licenses/LPL-1.0,LPL_1_0,http://publications.europa.eu/resource/authority/licence/LPL_1_0 +https://opensource.org/licenses/LPL-1.02,LPL_1_02,http://publications.europa.eu/resource/authority/licence/LPL_1_02 +https://opensource.org/licenses/LPPL-1.3c,LPPL_1_3C,http://publications.europa.eu/resource/authority/licence/LPPL_1_3C +https://opensource.org/licenses/MS-RL,MIROS,http://publications.europa.eu/resource/authority/licence/MIROS +https://opensource.org/licenses/MIT,MIT,http://publications.europa.eu/resource/authority/licence/MIT +https://opensource.org/licenses/Motosoto,MOTOSOTO,http://publications.europa.eu/resource/authority/licence/MOTOSOTO +https://opensource.org/licenses/MPL-1.0,MPL_1_0,http://publications.europa.eu/resource/authority/licence/MPL_1_0 +https://opensource.org/licenses/MPL-1.1,MPL_1_1,http://publications.europa.eu/resource/authority/licence/MPL_1_1 +https://opensource.org/licenses/MPL-2.0,MPL_2_0,http://publications.europa.eu/resource/authority/licence/MPL_2_0 +https://opensource.org/licenses/MS-PL,MS_PL,http://publications.europa.eu/resource/authority/licence/MS_PL +https://opensource.org/licenses/MS-RL,MS_RL,http://publications.europa.eu/resource/authority/licence/MS_RL +https://opensource.org/licenses/Multics,MULTICS,http://publications.europa.eu/resource/authority/licence/MULTICS +https://opensource.org/licenses/NASA-1.3,NASA_1_3,http://publications.europa.eu/resource/authority/licence/NASA_1_3 +https://opensource.org/licenses/Naumen,NAUMEN,http://publications.europa.eu/resource/authority/licence/NAUMEN +https://opensource.org/licenses/NCSA,NCSA,http://publications.europa.eu/resource/authority/licence/NCSA +https://opensource.org/licenses/NGPL,NGPL,http://publications.europa.eu/resource/authority/licence/NGPL +http://data.norge.no/nlod/en/1.0,NLOD_1_0,http://publications.europa.eu/resource/authority/licence/NLOD_1_0 +https://data.norge.no/nlod/en/2.0/,NLOD_2_0,http://publications.europa.eu/resource/authority/licence/NLOD_2_0 +https://opensource.org/licenses/NOKIA,NOKIA,http://publications.europa.eu/resource/authority/licence/NOKIA +https://opensource.org/licenses/NPOSL-3.0,NPOSL_3_0,http://publications.europa.eu/resource/authority/licence/NPOSL_3_0 +https://opensource.org/licenses/NTP,NTP,http://publications.europa.eu/resource/authority/licence/NTP +https://opensource.org/licenses/OCLC-2.0,OCLC_2_0,http://publications.europa.eu/resource/authority/licence/OCLC_2_0 +http://opendatacommons.org/licenses/odbl/1.0/,ODC_BL,http://publications.europa.eu/resource/authority/licence/ODC_BL +http://opendatacommons.org/licenses/by/1.0/,ODC_BY,http://publications.europa.eu/resource/authority/licence/ODC_BY +http://opendatacommons.org/licenses/pddl/1.0/,ODC_PDDL,http://publications.europa.eu/resource/authority/licence/ODC_PDDL +https://opensource.org/licenses/OFL-1.1,OFL_1_1,http://publications.europa.eu/resource/authority/licence/OFL_1_1 +http://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/,OGL_1_0,http://publications.europa.eu/resource/authority/licence/OGL_1_0 +http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/,OGL_2_0,http://publications.europa.eu/resource/authority/licence/OGL_2_0 +http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/,OGL_3_0,http://publications.europa.eu/resource/authority/licence/OGL_3_0 +http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/non-commercial-government-licence.htm,OGL_NC,http://publications.europa.eu/resource/authority/licence/OGL_NC +http://data.gov.ro/base/images/logoinst/OGL-ROU-1.0.pdf,OGL_ROU_1_0,http://publications.europa.eu/resource/authority/licence/OGL_ROU_1_0 +https://opensource.org/licenses/OGTSL,OGTSL,http://publications.europa.eu/resource/authority/licence/OGTSL +https://opensource.org/licenses/OPL-2.1,OPL_2_1,http://publications.europa.eu/resource/authority/licence/OPL_2_1 +http://publications.europa.eu/resource/authority/licence/OP_DATPRO,OP_DATPRO,http://publications.europa.eu/resource/authority/licence/OP_DATPRO +https://opensource.org/licenses/OSL-1.0,OSL_1_0,http://publications.europa.eu/resource/authority/licence/OSL_1_0 +https://opensource.org/licenses/OSL-2.1,OSL_2_1,http://publications.europa.eu/resource/authority/licence/OSL_2_1 +https://opensource.org/licenses/OSL-3.0,OSL_3_0,http://publications.europa.eu/resource/authority/licence/OSL_3_0 +https://opensource.org/licenses/PHP-3.0,PHP_3_0,http://publications.europa.eu/resource/authority/licence/PHP_3_0 +https://opensource.org/licenses/PostgreSQL,POSTGRE_SQL,http://publications.europa.eu/resource/authority/licence/POSTGRE_SQL +https://www.ordnancesurvey.co.uk/documents/licensing/inspire-end-user-licence.pdf,PSEUL,http://publications.europa.eu/resource/authority/licence/PSEUL +https://opensource.org/licenses/Python-2.0,PYTHON_2_0,http://publications.europa.eu/resource/authority/licence/PYTHON_2_0 +https://opensource.org/licenses/QPL-1.0,QPL_1_0,http://publications.europa.eu/resource/authority/licence/QPL_1_0 +https://opensource.org/licenses/RPL-1.1,RPL_1_1,http://publications.europa.eu/resource/authority/licence/RPL_1_1 +https://opensource.org/licenses/RPL-1.5,RPL_1_5,http://publications.europa.eu/resource/authority/licence/RPL_1_5 +https://opensource.org/licenses/RPSL-1.0,RPSL_1_0,http://publications.europa.eu/resource/authority/licence/RPSL_1_0 +https://opensource.org/licenses/RSCPL,RSCPL,http://publications.europa.eu/resource/authority/licence/RSCPL +https://opensource.org/licenses/SimPL-2.0,SIMPL_2_0,http://publications.europa.eu/resource/authority/licence/SIMPL_2_0 +https://opensource.org/licenses/Sleepycat,SLEEPYCAT,http://publications.europa.eu/resource/authority/licence/SLEEPYCAT +https://opensource.org/licenses/SPL-1.0,SPL_1_0,http://publications.europa.eu/resource/authority/licence/SPL_1_0 +https://opensource.org/licenses/UCL-1.0,UCL_1_0,http://publications.europa.eu/resource/authority/licence/UCL_1_0 +https://opensource.org/licenses/UPL,UPL_1_0,http://publications.europa.eu/resource/authority/licence/UPL_1_0 +https://opensource.org/licenses/VSL-1.0,VSL_1_0,http://publications.europa.eu/resource/authority/licence/VSL_1_0 +https://opensource.org/licenses/W3C,W3C,http://publications.europa.eu/resource/authority/licence/W3C +https://opensource.org/licenses/Watcom-1.0,WATCOM_1_0,http://publications.europa.eu/resource/authority/licence/WATCOM_1_0 +https://opensource.org/licenses/WXwindows,WXWINDOWS,http://publications.europa.eu/resource/authority/licence/WXWINDOWS +https://opensource.org/licenses/Xnet,XNET,http://publications.europa.eu/resource/authority/licence/XNET +https://opensource.org/licenses/Zlib,ZLIB,http://publications.europa.eu/resource/authority/licence/ZLIB +https://opensource.org/licenses/ZPL-2.0,ZPL_2_0,http://publications.europa.eu/resource/authority/licence/ZPL_2_0 diff --git a/ckanext/schemingdcat/codelists/dcat/csv/download/media-types.csv b/ckanext/schemingdcat/codelists/dcat/csv/download/media-types.csv new file mode 100644 index 0000000..cdaa918 --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/csv/download/media-types.csv @@ -0,0 +1,2110 @@ +http://www.iana.org/assignments/media-types/, +http://www.iana.org/assignments/media-types/application/1d-interleaved-parityfec,application/1d-interleaved-parityfec +http://www.iana.org/assignments/media-types/application/3gpdash-qoe-report+xml,application/3gpdash-qoe-report+xml +http://www.iana.org/assignments/media-types/application/3gpp-ims+xml,application/3gpp-ims+xml +http://www.iana.org/assignments/media-types/application/3gppHal+json,application/3gppHal+json +http://www.iana.org/assignments/media-types/application/3gppHalForms+json,application/3gppHalForms+json +http://www.iana.org/assignments/media-types/application/A2L,application/A2L +http://www.iana.org/assignments/media-types/application/AML,application/AML +http://www.iana.org/assignments/media-types/application/ATF,application/ATF +http://www.iana.org/assignments/media-types/application/ATFX,application/ATFX +http://www.iana.org/assignments/media-types/application/ATXML,application/ATXML +http://www.iana.org/assignments/media-types/application/CALS-1840,application/CALS-1840 +http://www.iana.org/assignments/media-types/application/CDFX+XML,application/CDFX+XML +http://www.iana.org/assignments/media-types/application/CEA,application/CEA +http://www.iana.org/assignments/media-types/application/CSTAdata+xml,application/CSTAdata+xml +http://www.iana.org/assignments/media-types/application/DCD,application/DCD +http://www.iana.org/assignments/media-types/application/DII,application/DII +http://www.iana.org/assignments/media-types/application/DIT,application/DIT +http://www.iana.org/assignments/media-types/application/EDI-X12,application/EDI-X12 +http://www.iana.org/assignments/media-types/application/EDI-consent,application/EDI-consent +http://www.iana.org/assignments/media-types/application/EDIFACT,application/EDIFACT +http://www.iana.org/assignments/media-types/application/EmergencyCallData.Comment+xml,application/EmergencyCallData.Comment+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.Control+xml,application/EmergencyCallData.Control+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.DeviceInfo+xml,application/EmergencyCallData.DeviceInfo+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.LegacyESN+json,application/EmergencyCallData.LegacyESN+json +http://www.iana.org/assignments/media-types/application/EmergencyCallData.ProviderInfo+xml,application/EmergencyCallData.ProviderInfo+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.ServiceInfo+xml,application/EmergencyCallData.ServiceInfo+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.SubscriberInfo+xml,application/EmergencyCallData.SubscriberInfo+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.VEDS+xml,application/EmergencyCallData.VEDS+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.cap+xml,application/EmergencyCallData.cap+xml +http://www.iana.org/assignments/media-types/application/EmergencyCallData.eCall.MSD,application/EmergencyCallData.eCall.MSD +http://www.iana.org/assignments/media-types/application/H224,application/H224 +http://www.iana.org/assignments/media-types/application/IOTP,application/IOTP +http://www.iana.org/assignments/media-types/application/ISUP,application/ISUP +http://www.iana.org/assignments/media-types/application/LXF,application/LXF +http://www.iana.org/assignments/media-types/application/MF4,application/MF4 +http://www.iana.org/assignments/media-types/application/ODA,application/ODA +http://www.iana.org/assignments/media-types/application/ODX,application/ODX +http://www.iana.org/assignments/media-types/application/PDX,application/PDX +http://www.iana.org/assignments/media-types/application/QSIG,application/QSIG +http://www.iana.org/assignments/media-types/application/SGML,application/SGML +http://www.iana.org/assignments/media-types/application/ST2110-41,application/ST2110-41 +http://www.iana.org/assignments/media-types/application/TETRA_ISI,application/TETRA_ISI +http://www.iana.org/assignments/media-types/application/ace+cbor,application/ace+cbor +http://www.iana.org/assignments/media-types/application/ace+json,application/ace+json +http://www.iana.org/assignments/media-types/application/ace-groupcomm+cbor,application/ace-groupcomm+cbor +http://www.iana.org/assignments/media-types/application/activemessage,application/activemessage +http://www.iana.org/assignments/media-types/application/activity+json,application/activity+json +http://www.iana.org/assignments/media-types/application/aif+cbor,application/aif+cbor +http://www.iana.org/assignments/media-types/application/aif+json,application/aif+json +http://www.iana.org/assignments/media-types/application/alto-cdni+json,application/alto-cdni+json +http://www.iana.org/assignments/media-types/application/alto-cdnifilter+json,application/alto-cdnifilter+json +http://www.iana.org/assignments/media-types/application/alto-costmap+json,application/alto-costmap+json +http://www.iana.org/assignments/media-types/application/alto-costmapfilter+json,application/alto-costmapfilter+json +http://www.iana.org/assignments/media-types/application/alto-directory+json,application/alto-directory+json +http://www.iana.org/assignments/media-types/application/alto-endpointcost+json,application/alto-endpointcost+json +http://www.iana.org/assignments/media-types/application/alto-endpointcostparams+json,application/alto-endpointcostparams+json +http://www.iana.org/assignments/media-types/application/alto-endpointprop+json,application/alto-endpointprop+json +http://www.iana.org/assignments/media-types/application/alto-endpointpropparams+json,application/alto-endpointpropparams+json +http://www.iana.org/assignments/media-types/application/alto-error+json,application/alto-error+json +http://www.iana.org/assignments/media-types/application/alto-networkmap+json,application/alto-networkmap+json +http://www.iana.org/assignments/media-types/application/alto-networkmapfilter+json,application/alto-networkmapfilter+json +http://www.iana.org/assignments/media-types/application/alto-propmap+json,application/alto-propmap+json +http://www.iana.org/assignments/media-types/application/alto-propmapparams+json,application/alto-propmapparams+json +http://www.iana.org/assignments/media-types/application/alto-tips+json,application/alto-tips+json +http://www.iana.org/assignments/media-types/application/alto-tipsparams+json,application/alto-tipsparams+json +http://www.iana.org/assignments/media-types/application/alto-updatestreamcontrol+json,application/alto-updatestreamcontrol+json +http://www.iana.org/assignments/media-types/application/alto-updatestreamparams+json,application/alto-updatestreamparams+json +http://www.iana.org/assignments/media-types/application/andrew-inset,application/andrew-inset +http://www.iana.org/assignments/media-types/application/applefile,application/applefile +http://www.iana.org/assignments/media-types/application/at+jwt,application/at+jwt +http://www.iana.org/assignments/media-types/application/atom+xml,application/atom+xml +http://www.iana.org/assignments/media-types/application/atomcat+xml,application/atomcat+xml +http://www.iana.org/assignments/media-types/application/atomdeleted+xml,application/atomdeleted+xml +http://www.iana.org/assignments/media-types/application/atomicmail,application/atomicmail +http://www.iana.org/assignments/media-types/application/atomsvc+xml,application/atomsvc+xml +http://www.iana.org/assignments/media-types/application/atsc-dwd+xml,application/atsc-dwd+xml +http://www.iana.org/assignments/media-types/application/atsc-dynamic-event-message,application/atsc-dynamic-event-message +http://www.iana.org/assignments/media-types/application/atsc-held+xml,application/atsc-held+xml +http://www.iana.org/assignments/media-types/application/atsc-rdt+json,application/atsc-rdt+json +http://www.iana.org/assignments/media-types/application/atsc-rsat+xml,application/atsc-rsat+xml +http://www.iana.org/assignments/media-types/application/auth-policy+xml,application/auth-policy+xml +http://www.iana.org/assignments/media-types/application/automationml-aml+xml,application/automationml-aml+xml +http://www.iana.org/assignments/media-types/application/automationml-amlx+zip,application/automationml-amlx+zip +http://www.iana.org/assignments/media-types/application/bacnet-xdd+zip,application/bacnet-xdd+zip +http://www.iana.org/assignments/media-types/application/batch-SMTP,application/batch-SMTP +http://www.iana.org/assignments/media-types/application/beep+xml,application/beep+xml +http://www.iana.org/assignments/media-types/application/bufr,application/bufr +http://www.iana.org/assignments/media-types/application/c2pa,application/c2pa +http://www.iana.org/assignments/media-types/application/calendar+json,application/calendar+json +http://www.iana.org/assignments/media-types/application/calendar+xml,application/calendar+xml +http://www.iana.org/assignments/media-types/application/call-completion,application/call-completion +http://www.iana.org/assignments/media-types/application/captive+json,application/captive+json +http://www.iana.org/assignments/media-types/application/cbor,application/cbor +http://www.iana.org/assignments/media-types/application/cbor-seq,application/cbor-seq +http://www.iana.org/assignments/media-types/application/cccex,application/cccex +http://www.iana.org/assignments/media-types/application/ccmp+xml,application/ccmp+xml +http://www.iana.org/assignments/media-types/application/ccxml+xml,application/ccxml+xml +http://www.iana.org/assignments/media-types/application/cda+xml,application/cda+xml +http://www.iana.org/assignments/media-types/application/cdmi-capability,application/cdmi-capability +http://www.iana.org/assignments/media-types/application/cdmi-container,application/cdmi-container +http://www.iana.org/assignments/media-types/application/cdmi-domain,application/cdmi-domain +http://www.iana.org/assignments/media-types/application/cdmi-object,application/cdmi-object +http://www.iana.org/assignments/media-types/application/cdmi-queue,application/cdmi-queue +http://www.iana.org/assignments/media-types/application/cdni,application/cdni +http://www.iana.org/assignments/media-types/application/cea-2018+xml,application/cea-2018+xml +http://www.iana.org/assignments/media-types/application/cellml+xml,application/cellml+xml +http://www.iana.org/assignments/media-types/application/cfw,application/cfw +http://www.iana.org/assignments/media-types/application/cid-edhoc+cbor-seq,application/cid-edhoc+cbor-seq +http://www.iana.org/assignments/media-types/application/city+json,application/city+json +http://www.iana.org/assignments/media-types/application/clr,application/clr +http://www.iana.org/assignments/media-types/application/clue+xml,application/clue+xml +http://www.iana.org/assignments/media-types/application/clue_info+xml,application/clue_info+xml +http://www.iana.org/assignments/media-types/application/cms,application/cms +http://www.iana.org/assignments/media-types/application/cnrp+xml,application/cnrp+xml +http://www.iana.org/assignments/media-types/application/coap-group+json,application/coap-group+json +http://www.iana.org/assignments/media-types/application/coap-payload,application/coap-payload +http://www.iana.org/assignments/media-types/application/commonground,application/commonground +http://www.iana.org/assignments/media-types/application/concise-problem-details+cbor,application/concise-problem-details+cbor +http://www.iana.org/assignments/media-types/application/conference-info+xml,application/conference-info+xml +http://www.iana.org/assignments/media-types/application/cose,application/cose +http://www.iana.org/assignments/media-types/application/cose-key,application/cose-key +http://www.iana.org/assignments/media-types/application/cose-key-set,application/cose-key-set +http://www.iana.org/assignments/media-types/application/cose-x509,application/cose-x509 +http://www.iana.org/assignments/media-types/application/cpl+xml,application/cpl+xml +http://www.iana.org/assignments/media-types/application/csrattrs,application/csrattrs +http://www.iana.org/assignments/media-types/application/csta+xml,application/csta+xml +http://www.iana.org/assignments/media-types/application/csvm+json,application/csvm+json +http://www.iana.org/assignments/media-types/application/cwl,application/cwl +http://www.iana.org/assignments/media-types/application/cwl+json,application/cwl+json +http://www.iana.org/assignments/media-types/application/cwl+yaml,application/cwl+yaml +http://www.iana.org/assignments/media-types/application/cwt,application/cwt +http://www.iana.org/assignments/media-types/application/cybercash,application/cybercash +http://www.iana.org/assignments/media-types/application/dash+xml,application/dash+xml +http://www.iana.org/assignments/media-types/application/dash-patch+xml,application/dash-patch+xml +http://www.iana.org/assignments/media-types/application/dashdelta,application/dashdelta +http://www.iana.org/assignments/media-types/application/davmount+xml,application/davmount+xml +http://www.iana.org/assignments/media-types/application/dca-rft,application/dca-rft +http://www.iana.org/assignments/media-types/application/dec-dx,application/dec-dx +http://www.iana.org/assignments/media-types/application/dialog-info+xml,application/dialog-info+xml +http://www.iana.org/assignments/media-types/application/dicom,application/dicom +http://www.iana.org/assignments/media-types/application/dicom+json,application/dicom+json +http://www.iana.org/assignments/media-types/application/dicom+xml,application/dicom+xml +http://www.iana.org/assignments/media-types/application/dns,application/dns +http://www.iana.org/assignments/media-types/application/dns+json,application/dns+json +http://www.iana.org/assignments/media-types/application/dns-message,application/dns-message +http://www.iana.org/assignments/media-types/application/dots+cbor,application/dots+cbor +http://www.iana.org/assignments/media-types/application/dpop+jwt,application/dpop+jwt +http://www.iana.org/assignments/media-types/application/dskpp+xml,application/dskpp+xml +http://www.iana.org/assignments/media-types/application/dssc+der,application/dssc+der +http://www.iana.org/assignments/media-types/application/dssc+xml,application/dssc+xml +http://www.iana.org/assignments/media-types/application/dvcs,application/dvcs +http://www.iana.org/assignments/media-types/application/ecmascript,application/ecmascript +http://www.iana.org/assignments/media-types/application/edhoc+cbor-seq,application/edhoc+cbor-seq +http://www.iana.org/assignments/media-types/application/efi,application/efi +http://www.iana.org/assignments/media-types/application/elm+json,application/elm+json +http://www.iana.org/assignments/media-types/application/elm+xml,application/elm+xml +http://www.iana.org/assignments/media-types/application/emma+xml,application/emma+xml +http://www.iana.org/assignments/media-types/application/emotionml+xml,application/emotionml+xml +http://www.iana.org/assignments/media-types/application/encaprtp,application/encaprtp +http://www.iana.org/assignments/media-types/application/epp+xml,application/epp+xml +http://www.iana.org/assignments/media-types/application/epub+zip,application/epub+zip +http://www.iana.org/assignments/media-types/application/eshop,application/eshop +http://www.iana.org/assignments/media-types/application/example,application/example +http://www.iana.org/assignments/media-types/application/exi,application/exi +http://www.iana.org/assignments/media-types/application/expect-ct-report+json,application/expect-ct-report+json +http://www.iana.org/assignments/media-types/application/express,application/express +http://www.iana.org/assignments/media-types/application/fastinfoset,application/fastinfoset +http://www.iana.org/assignments/media-types/application/fastsoap,application/fastsoap +http://www.iana.org/assignments/media-types/application/fdf,application/fdf +http://www.iana.org/assignments/media-types/application/fdt+xml,application/fdt+xml +http://www.iana.org/assignments/media-types/application/fhir+json,application/fhir+json +http://www.iana.org/assignments/media-types/application/fhir+xml,application/fhir+xml +http://www.iana.org/assignments/media-types/application/fits,application/fits +http://www.iana.org/assignments/media-types/application/flexfec,application/flexfec +http://www.iana.org/assignments/media-types/application/font-sfnt,application/font-sfnt +http://www.iana.org/assignments/media-types/application/font-tdpfr,application/font-tdpfr +http://www.iana.org/assignments/media-types/application/font-woff,application/font-woff +http://www.iana.org/assignments/media-types/application/framework-attributes+xml,application/framework-attributes+xml +http://www.iana.org/assignments/media-types/application/geo+json,application/geo+json +http://www.iana.org/assignments/media-types/application/geo+json-seq,application/geo+json-seq +http://www.iana.org/assignments/media-types/application/geopackage+sqlite3,application/geopackage+sqlite3 +http://www.iana.org/assignments/media-types/application/geoxacml+json,application/geoxacml+json +http://www.iana.org/assignments/media-types/application/geoxacml+xml,application/geoxacml+xml +http://www.iana.org/assignments/media-types/application/gltf-buffer,application/gltf-buffer +http://www.iana.org/assignments/media-types/application/gml+xml,application/gml+xml +http://www.iana.org/assignments/media-types/application/gnap-binding-jws,application/gnap-binding-jws +http://www.iana.org/assignments/media-types/application/gnap-binding-jwsd,application/gnap-binding-jwsd +http://www.iana.org/assignments/media-types/application/gnap-binding-rotation-jws,application/gnap-binding-rotation-jws +http://www.iana.org/assignments/media-types/application/gnap-binding-rotation-jwsd,application/gnap-binding-rotation-jwsd +http://www.iana.org/assignments/media-types/application/grib,application/grib +http://www.iana.org/assignments/media-types/application/gzip,application/gzip +http://www.iana.org/assignments/media-types/application/held+xml,application/held+xml +http://www.iana.org/assignments/media-types/application/hl7v2+xml,application/hl7v2+xml +http://www.iana.org/assignments/media-types/application/http,application/http +http://www.iana.org/assignments/media-types/application/hyperstudio,application/hyperstudio +http://www.iana.org/assignments/media-types/application/ibe-key-request+xml,application/ibe-key-request+xml +http://www.iana.org/assignments/media-types/application/ibe-pkg-reply+xml,application/ibe-pkg-reply+xml +http://www.iana.org/assignments/media-types/application/ibe-pp-data,application/ibe-pp-data +http://www.iana.org/assignments/media-types/application/iges,application/iges +http://www.iana.org/assignments/media-types/application/im-iscomposing+xml,application/im-iscomposing+xml +http://www.iana.org/assignments/media-types/application/index,application/index +http://www.iana.org/assignments/media-types/application/index.cmd,application/index.cmd +http://www.iana.org/assignments/media-types/application/index.obj,application/index.obj +http://www.iana.org/assignments/media-types/application/index.response,application/index.response +http://www.iana.org/assignments/media-types/application/index.vnd,application/index.vnd +http://www.iana.org/assignments/media-types/application/inkml+xml,application/inkml+xml +http://www.iana.org/assignments/media-types/application/ipfix,application/ipfix +http://www.iana.org/assignments/media-types/application/ipp,application/ipp +http://www.iana.org/assignments/media-types/application/its+xml,application/its+xml +http://www.iana.org/assignments/media-types/application/java-archive,application/java-archive +http://www.iana.org/assignments/media-types/application/javascript,application/javascript +http://www.iana.org/assignments/media-types/application/jf2feed+json,application/jf2feed+json +http://www.iana.org/assignments/media-types/application/jose,application/jose +http://www.iana.org/assignments/media-types/application/jose+json,application/jose+json +http://www.iana.org/assignments/media-types/application/jrd+json,application/jrd+json +http://www.iana.org/assignments/media-types/application/jscalendar+json,application/jscalendar+json +http://www.iana.org/assignments/media-types/application/jscontact+json,application/jscontact+json +http://www.iana.org/assignments/media-types/application/json,application/json +http://www.iana.org/assignments/media-types/application/json-patch+json,application/json-patch+json +http://www.iana.org/assignments/media-types/application/json-seq,application/json-seq +http://www.iana.org/assignments/media-types/application/jsonpath,application/jsonpath +http://www.iana.org/assignments/media-types/application/jwk+json,application/jwk+json +http://www.iana.org/assignments/media-types/application/jwk-set+json,application/jwk-set+json +http://www.iana.org/assignments/media-types/application/jwt,application/jwt +http://www.iana.org/assignments/media-types/application/kpml-request+xml,application/kpml-request+xml +http://www.iana.org/assignments/media-types/application/kpml-response+xml,application/kpml-response+xml +http://www.iana.org/assignments/media-types/application/ld+json,application/ld+json +http://www.iana.org/assignments/media-types/application/lgr+xml,application/lgr+xml +http://www.iana.org/assignments/media-types/application/link-format,application/link-format +http://www.iana.org/assignments/media-types/application/linkset,application/linkset +http://www.iana.org/assignments/media-types/application/linkset+json,application/linkset+json +http://www.iana.org/assignments/media-types/application/load-control+xml,application/load-control+xml +http://www.iana.org/assignments/media-types/application/logout+jwt,application/logout+jwt +http://www.iana.org/assignments/media-types/application/lost+xml,application/lost+xml +http://www.iana.org/assignments/media-types/application/lostsync+xml,application/lostsync+xml +http://www.iana.org/assignments/media-types/application/lpf+zip,application/lpf+zip +http://www.iana.org/assignments/media-types/application/mac-binhex40,application/mac-binhex40 +http://www.iana.org/assignments/media-types/application/macwriteii,application/macwriteii +http://www.iana.org/assignments/media-types/application/mads+xml,application/mads+xml +http://www.iana.org/assignments/media-types/application/manifest+json,application/manifest+json +http://www.iana.org/assignments/media-types/application/marc,application/marc +http://www.iana.org/assignments/media-types/application/marcxml+xml,application/marcxml+xml +http://www.iana.org/assignments/media-types/application/mathematica,application/mathematica +http://www.iana.org/assignments/media-types/application/mathml+xml,application/mathml+xml +http://www.iana.org/assignments/media-types/application/mathml-content+xml,application/mathml-content+xml +http://www.iana.org/assignments/media-types/application/mathml-presentation+xml,application/mathml-presentation+xml +http://www.iana.org/assignments/media-types/application/mbms-associated-procedure-description+xml,application/mbms-associated-procedure-description+xml +http://www.iana.org/assignments/media-types/application/mbms-deregister+xml,application/mbms-deregister+xml +http://www.iana.org/assignments/media-types/application/mbms-envelope+xml,application/mbms-envelope+xml +http://www.iana.org/assignments/media-types/application/mbms-msk+xml,application/mbms-msk+xml +http://www.iana.org/assignments/media-types/application/mbms-msk-response+xml,application/mbms-msk-response+xml +http://www.iana.org/assignments/media-types/application/mbms-protection-description+xml,application/mbms-protection-description+xml +http://www.iana.org/assignments/media-types/application/mbms-reception-report+xml,application/mbms-reception-report+xml +http://www.iana.org/assignments/media-types/application/mbms-register+xml,application/mbms-register+xml +http://www.iana.org/assignments/media-types/application/mbms-register-response+xml,application/mbms-register-response+xml +http://www.iana.org/assignments/media-types/application/mbms-schedule+xml,application/mbms-schedule+xml +http://www.iana.org/assignments/media-types/application/mbms-user-service-description+xml,application/mbms-user-service-description+xml +http://www.iana.org/assignments/media-types/application/mbox,application/mbox +http://www.iana.org/assignments/media-types/application/media-policy-dataset+xml,application/media-policy-dataset+xml +http://www.iana.org/assignments/media-types/application/media_control+xml,application/media_control+xml +http://www.iana.org/assignments/media-types/application/mediaservercontrol+xml,application/mediaservercontrol+xml +http://www.iana.org/assignments/media-types/application/merge-patch+json,application/merge-patch+json +http://www.iana.org/assignments/media-types/application/metalink4+xml,application/metalink4+xml +http://www.iana.org/assignments/media-types/application/mets+xml,application/mets+xml +http://www.iana.org/assignments/media-types/application/mikey,application/mikey +http://www.iana.org/assignments/media-types/application/mipc,application/mipc +http://www.iana.org/assignments/media-types/application/missing-blocks+cbor-seq,application/missing-blocks+cbor-seq +http://www.iana.org/assignments/media-types/application/mmt-aei+xml,application/mmt-aei+xml +http://www.iana.org/assignments/media-types/application/mmt-usd+xml,application/mmt-usd+xml +http://www.iana.org/assignments/media-types/application/mods+xml,application/mods+xml +http://www.iana.org/assignments/media-types/application/moss-keys,application/moss-keys +http://www.iana.org/assignments/media-types/application/moss-signature,application/moss-signature +http://www.iana.org/assignments/media-types/application/mosskey-data,application/mosskey-data +http://www.iana.org/assignments/media-types/application/mosskey-request,application/mosskey-request +http://www.iana.org/assignments/media-types/application/mp21,application/mp21 +http://www.iana.org/assignments/media-types/application/mp4,application/mp4 +http://www.iana.org/assignments/media-types/application/mpeg4-generic,application/mpeg4-generic +http://www.iana.org/assignments/media-types/application/mpeg4-iod,application/mpeg4-iod +http://www.iana.org/assignments/media-types/application/mpeg4-iod-xmt,application/mpeg4-iod-xmt +http://www.iana.org/assignments/media-types/application/mrb-consumer+xml,application/mrb-consumer+xml +http://www.iana.org/assignments/media-types/application/mrb-publish+xml,application/mrb-publish+xml +http://www.iana.org/assignments/media-types/application/msc-ivr+xml,application/msc-ivr+xml +http://www.iana.org/assignments/media-types/application/msc-mixer+xml,application/msc-mixer+xml +http://www.iana.org/assignments/media-types/application/msword,application/msword +http://www.iana.org/assignments/media-types/application/mud+json,application/mud+json +http://www.iana.org/assignments/media-types/application/multipart-core,application/multipart-core +http://www.iana.org/assignments/media-types/application/mxf,application/mxf +http://www.iana.org/assignments/media-types/application/n-quads,application/n-quads +http://www.iana.org/assignments/media-types/application/n-triples,application/n-triples +http://www.iana.org/assignments/media-types/application/nasdata,application/nasdata +http://www.iana.org/assignments/media-types/application/news-checkgroups,application/news-checkgroups +http://www.iana.org/assignments/media-types/application/news-groupinfo,application/news-groupinfo +http://www.iana.org/assignments/media-types/application/news-transmission,application/news-transmission +http://www.iana.org/assignments/media-types/application/nlsml+xml,application/nlsml+xml +http://www.iana.org/assignments/media-types/application/node,application/node +http://www.iana.org/assignments/media-types/application/nss,application/nss +http://www.iana.org/assignments/media-types/application/oauth-authz-req+jwt,application/oauth-authz-req+jwt +http://www.iana.org/assignments/media-types/application/oblivious-dns-message,application/oblivious-dns-message +http://www.iana.org/assignments/media-types/application/ocsp-request,application/ocsp-request +http://www.iana.org/assignments/media-types/application/ocsp-response,application/ocsp-response +http://www.iana.org/assignments/media-types/application/octet-stream,application/octet-stream +http://www.iana.org/assignments/media-types/application/odm+xml,application/odm+xml +http://www.iana.org/assignments/media-types/application/oebps-package+xml,application/oebps-package+xml +http://www.iana.org/assignments/media-types/application/ogg,application/ogg +http://www.iana.org/assignments/media-types/application/ohttp-keys,application/ohttp-keys +http://www.iana.org/assignments/media-types/application/opc-nodeset+xml,application/opc-nodeset+xml +http://www.iana.org/assignments/media-types/application/oscore,application/oscore +http://www.iana.org/assignments/media-types/application/oxps,application/oxps +http://www.iana.org/assignments/media-types/application/p21,application/p21 +http://www.iana.org/assignments/media-types/application/p21+zip,application/p21+zip +http://www.iana.org/assignments/media-types/application/p2p-overlay+xml,application/p2p-overlay+xml +http://www.iana.org/assignments/media-types/application/parityfec,application/parityfec +http://www.iana.org/assignments/media-types/application/passport,application/passport +http://www.iana.org/assignments/media-types/application/patch-ops-error+xml,application/patch-ops-error+xml +http://www.iana.org/assignments/media-types/application/pdf,application/pdf +http://www.iana.org/assignments/media-types/application/pem-certificate-chain,application/pem-certificate-chain +http://www.iana.org/assignments/media-types/application/pgp-encrypted,application/pgp-encrypted +http://www.iana.org/assignments/media-types/application/pgp-keys,application/pgp-keys +http://www.iana.org/assignments/media-types/application/pgp-signature,application/pgp-signature +http://www.iana.org/assignments/media-types/application/pidf+xml,application/pidf+xml +http://www.iana.org/assignments/media-types/application/pidf-diff+xml,application/pidf-diff+xml +http://www.iana.org/assignments/media-types/application/pkcs10,application/pkcs10 +http://www.iana.org/assignments/media-types/application/pkcs12,application/pkcs12 +http://www.iana.org/assignments/media-types/application/pkcs7-mime,application/pkcs7-mime +http://www.iana.org/assignments/media-types/application/pkcs7-signature,application/pkcs7-signature +http://www.iana.org/assignments/media-types/application/pkcs8,application/pkcs8 +http://www.iana.org/assignments/media-types/application/pkcs8-encrypted,application/pkcs8-encrypted +http://www.iana.org/assignments/media-types/application/pkix-attr-cert,application/pkix-attr-cert +http://www.iana.org/assignments/media-types/application/pkix-cert,application/pkix-cert +http://www.iana.org/assignments/media-types/application/pkix-crl,application/pkix-crl +http://www.iana.org/assignments/media-types/application/pkix-pkipath,application/pkix-pkipath +http://www.iana.org/assignments/media-types/application/pkixcmp,application/pkixcmp +http://www.iana.org/assignments/media-types/application/pls+xml,application/pls+xml +http://www.iana.org/assignments/media-types/application/poc-settings+xml,application/poc-settings+xml +http://www.iana.org/assignments/media-types/application/postscript,application/postscript +http://www.iana.org/assignments/media-types/application/ppsp-tracker+json,application/ppsp-tracker+json +http://www.iana.org/assignments/media-types/application/private-token-issuer-directory,application/private-token-issuer-directory +http://www.iana.org/assignments/media-types/application/private-token-request,application/private-token-request +http://www.iana.org/assignments/media-types/application/private-token-response,application/private-token-response +http://www.iana.org/assignments/media-types/application/problem+json,application/problem+json +http://www.iana.org/assignments/media-types/application/problem+xml,application/problem+xml +http://www.iana.org/assignments/media-types/application/provenance+xml,application/provenance+xml +http://www.iana.org/assignments/media-types/application/prs.alvestrand.titrax-sheet,application/prs.alvestrand.titrax-sheet +http://www.iana.org/assignments/media-types/application/prs.cww,application/prs.cww +http://www.iana.org/assignments/media-types/application/prs.cyn,application/prs.cyn +http://www.iana.org/assignments/media-types/application/prs.hpub+zip,application/prs.hpub+zip +http://www.iana.org/assignments/media-types/application/prs.implied-document+xml,application/prs.implied-document+xml +http://www.iana.org/assignments/media-types/application/prs.implied-executable,application/prs.implied-executable +http://www.iana.org/assignments/media-types/application/prs.implied-object+json,application/prs.implied-object+json +http://www.iana.org/assignments/media-types/application/prs.implied-object+json-seq,application/prs.implied-object+json-seq +http://www.iana.org/assignments/media-types/application/prs.implied-object+yaml,application/prs.implied-object+yaml +http://www.iana.org/assignments/media-types/application/prs.implied-structure,application/prs.implied-structure +http://www.iana.org/assignments/media-types/application/prs.nprend,application/prs.nprend +http://www.iana.org/assignments/media-types/application/prs.plucker,application/prs.plucker +http://www.iana.org/assignments/media-types/application/prs.rdf-xml-crypt,application/prs.rdf-xml-crypt +http://www.iana.org/assignments/media-types/application/prs.vcfbzip2,application/prs.vcfbzip2 +http://www.iana.org/assignments/media-types/application/prs.xsf+xml,application/prs.xsf+xml +http://www.iana.org/assignments/media-types/application/pskc+xml,application/pskc+xml +http://www.iana.org/assignments/media-types/application/pvd+json,application/pvd+json +http://www.iana.org/assignments/media-types/application/raptorfec,application/raptorfec +http://www.iana.org/assignments/media-types/application/rdap+json,application/rdap+json +http://www.iana.org/assignments/media-types/application/rdf+xml,application/rdf+xml +http://www.iana.org/assignments/media-types/application/reginfo+xml,application/reginfo+xml +http://www.iana.org/assignments/media-types/application/relax-ng-compact-syntax,application/relax-ng-compact-syntax +http://www.iana.org/assignments/media-types/application/remote-printing,application/remote-printing +http://www.iana.org/assignments/media-types/application/reputon+json,application/reputon+json +http://www.iana.org/assignments/media-types/application/resource-lists+xml,application/resource-lists+xml +http://www.iana.org/assignments/media-types/application/resource-lists-diff+xml,application/resource-lists-diff+xml +http://www.iana.org/assignments/media-types/application/rfc+xml,application/rfc+xml +http://www.iana.org/assignments/media-types/application/riscos,application/riscos +http://www.iana.org/assignments/media-types/application/rlmi+xml,application/rlmi+xml +http://www.iana.org/assignments/media-types/application/rls-services+xml,application/rls-services+xml +http://www.iana.org/assignments/media-types/application/route-apd+xml,application/route-apd+xml +http://www.iana.org/assignments/media-types/application/route-s-tsid+xml,application/route-s-tsid+xml +http://www.iana.org/assignments/media-types/application/route-usd+xml,application/route-usd+xml +http://www.iana.org/assignments/media-types/application/rpki-checklist,application/rpki-checklist +http://www.iana.org/assignments/media-types/application/rpki-ghostbusters,application/rpki-ghostbusters +http://www.iana.org/assignments/media-types/application/rpki-manifest,application/rpki-manifest +http://www.iana.org/assignments/media-types/application/rpki-publication,application/rpki-publication +http://www.iana.org/assignments/media-types/application/rpki-roa,application/rpki-roa +http://www.iana.org/assignments/media-types/application/rpki-signed-tal,application/rpki-signed-tal +http://www.iana.org/assignments/media-types/application/rpki-updown,application/rpki-updown +http://www.iana.org/assignments/media-types/application/rtf,application/rtf +http://www.iana.org/assignments/media-types/application/rtploopback,application/rtploopback +http://www.iana.org/assignments/media-types/application/rtx,application/rtx +http://www.iana.org/assignments/media-types/application/samlassertion+xml,application/samlassertion+xml +http://www.iana.org/assignments/media-types/application/samlmetadata+xml,application/samlmetadata+xml +http://www.iana.org/assignments/media-types/application/sarif+json,application/sarif+json +http://www.iana.org/assignments/media-types/application/sarif-external-properties+json,application/sarif-external-properties+json +http://www.iana.org/assignments/media-types/application/sbe,application/sbe +http://www.iana.org/assignments/media-types/application/sbml+xml,application/sbml+xml +http://www.iana.org/assignments/media-types/application/scaip+xml,application/scaip+xml +http://www.iana.org/assignments/media-types/application/scim+json,application/scim+json +http://www.iana.org/assignments/media-types/application/scvp-cv-request,application/scvp-cv-request +http://www.iana.org/assignments/media-types/application/scvp-cv-response,application/scvp-cv-response +http://www.iana.org/assignments/media-types/application/scvp-vp-request,application/scvp-vp-request +http://www.iana.org/assignments/media-types/application/scvp-vp-response,application/scvp-vp-response +http://www.iana.org/assignments/media-types/application/sdp,application/sdp +http://www.iana.org/assignments/media-types/application/secevent+jwt,application/secevent+jwt +http://www.iana.org/assignments/media-types/application/senml+cbor,application/senml+cbor +http://www.iana.org/assignments/media-types/application/senml+json,application/senml+json +http://www.iana.org/assignments/media-types/application/senml+xml,application/senml+xml +http://www.iana.org/assignments/media-types/application/senml-etch+cbor,application/senml-etch+cbor +http://www.iana.org/assignments/media-types/application/senml-etch+json,application/senml-etch+json +http://www.iana.org/assignments/media-types/application/senml-exi,application/senml-exi +http://www.iana.org/assignments/media-types/application/sensml+cbor,application/sensml+cbor +http://www.iana.org/assignments/media-types/application/sensml+json,application/sensml+json +http://www.iana.org/assignments/media-types/application/sensml+xml,application/sensml+xml +http://www.iana.org/assignments/media-types/application/sensml-exi,application/sensml-exi +http://www.iana.org/assignments/media-types/application/sep+xml,application/sep+xml +http://www.iana.org/assignments/media-types/application/sep-exi,application/sep-exi +http://www.iana.org/assignments/media-types/application/session-info,application/session-info +http://www.iana.org/assignments/media-types/application/set-payment,application/set-payment +http://www.iana.org/assignments/media-types/application/set-payment-initiation,application/set-payment-initiation +http://www.iana.org/assignments/media-types/application/set-registration,application/set-registration +http://www.iana.org/assignments/media-types/application/set-registration-initiation,application/set-registration-initiation +http://www.iana.org/assignments/media-types/application/sgml-open-catalog,application/sgml-open-catalog +http://www.iana.org/assignments/media-types/application/shf+xml,application/shf+xml +http://www.iana.org/assignments/media-types/application/sieve,application/sieve +http://www.iana.org/assignments/media-types/application/simple-filter+xml,application/simple-filter+xml +http://www.iana.org/assignments/media-types/application/simple-message-summary,application/simple-message-summary +http://www.iana.org/assignments/media-types/application/simpleSymbolContainer,application/simpleSymbolContainer +http://www.iana.org/assignments/media-types/application/sipc,application/sipc +http://www.iana.org/assignments/media-types/application/slate,application/slate +http://www.iana.org/assignments/media-types/application/smil,application/smil +http://www.iana.org/assignments/media-types/application/smil+xml,application/smil+xml +http://www.iana.org/assignments/media-types/application/smpte336m,application/smpte336m +http://www.iana.org/assignments/media-types/application/soap+fastinfoset,application/soap+fastinfoset +http://www.iana.org/assignments/media-types/application/soap+xml,application/soap+xml +http://www.iana.org/assignments/media-types/application/sparql-query,application/sparql-query +http://www.iana.org/assignments/media-types/application/sparql-results+xml,application/sparql-results+xml +http://www.iana.org/assignments/media-types/application/spdx+json,application/spdx+json +http://www.iana.org/assignments/media-types/application/spirits-event+xml,application/spirits-event+xml +http://www.iana.org/assignments/media-types/application/sql,application/sql +http://www.iana.org/assignments/media-types/application/srgs,application/srgs +http://www.iana.org/assignments/media-types/application/srgs+xml,application/srgs+xml +http://www.iana.org/assignments/media-types/application/sru+xml,application/sru+xml +http://www.iana.org/assignments/media-types/application/sslkeylogfile,application/sslkeylogfile +http://www.iana.org/assignments/media-types/application/ssml+xml,application/ssml+xml +http://www.iana.org/assignments/media-types/application/stix+json,application/stix+json +http://www.iana.org/assignments/media-types/application/stratum,application/stratum +http://www.iana.org/assignments/media-types/application/swid+cbor,application/swid+cbor +http://www.iana.org/assignments/media-types/application/swid+xml,application/swid+xml +http://www.iana.org/assignments/media-types/application/tamp-apex-update,application/tamp-apex-update +http://www.iana.org/assignments/media-types/application/tamp-apex-update-confirm,application/tamp-apex-update-confirm +http://www.iana.org/assignments/media-types/application/tamp-community-update,application/tamp-community-update +http://www.iana.org/assignments/media-types/application/tamp-community-update-confirm,application/tamp-community-update-confirm +http://www.iana.org/assignments/media-types/application/tamp-error,application/tamp-error +http://www.iana.org/assignments/media-types/application/tamp-sequence-adjust,application/tamp-sequence-adjust +http://www.iana.org/assignments/media-types/application/tamp-sequence-adjust-confirm,application/tamp-sequence-adjust-confirm +http://www.iana.org/assignments/media-types/application/tamp-status-query,application/tamp-status-query +http://www.iana.org/assignments/media-types/application/tamp-status-response,application/tamp-status-response +http://www.iana.org/assignments/media-types/application/tamp-update,application/tamp-update +http://www.iana.org/assignments/media-types/application/tamp-update-confirm,application/tamp-update-confirm +http://www.iana.org/assignments/media-types/application/taxii+json,application/taxii+json +http://www.iana.org/assignments/media-types/application/td+json,application/td+json +http://www.iana.org/assignments/media-types/application/tei+xml,application/tei+xml +http://www.iana.org/assignments/media-types/application/thraud+xml,application/thraud+xml +http://www.iana.org/assignments/media-types/application/timestamp-query,application/timestamp-query +http://www.iana.org/assignments/media-types/application/timestamp-reply,application/timestamp-reply +http://www.iana.org/assignments/media-types/application/timestamped-data,application/timestamped-data +http://www.iana.org/assignments/media-types/application/tlsrpt+gzip,application/tlsrpt+gzip +http://www.iana.org/assignments/media-types/application/tlsrpt+json,application/tlsrpt+json +http://www.iana.org/assignments/media-types/application/tm+json,application/tm+json +http://www.iana.org/assignments/media-types/application/tnauthlist,application/tnauthlist +http://www.iana.org/assignments/media-types/application/token-introspection+jwt,application/token-introspection+jwt +http://www.iana.org/assignments/media-types/application/trickle-ice-sdpfrag,application/trickle-ice-sdpfrag +http://www.iana.org/assignments/media-types/application/trig,application/trig +http://www.iana.org/assignments/media-types/application/ttml+xml,application/ttml+xml +http://www.iana.org/assignments/media-types/application/tve-trigger,application/tve-trigger +http://www.iana.org/assignments/media-types/application/tzif,application/tzif +http://www.iana.org/assignments/media-types/application/tzif-leap,application/tzif-leap +http://www.iana.org/assignments/media-types/application/ulpfec,application/ulpfec +http://www.iana.org/assignments/media-types/application/urc-grpsheet+xml,application/urc-grpsheet+xml +http://www.iana.org/assignments/media-types/application/urc-ressheet+xml,application/urc-ressheet+xml +http://www.iana.org/assignments/media-types/application/urc-targetdesc+xml,application/urc-targetdesc+xml +http://www.iana.org/assignments/media-types/application/urc-uisocketdesc+xml,application/urc-uisocketdesc+xml +http://www.iana.org/assignments/media-types/application/vc,application/vc +http://www.iana.org/assignments/media-types/application/vcard+json,application/vcard+json +http://www.iana.org/assignments/media-types/application/vcard+xml,application/vcard+xml +http://www.iana.org/assignments/media-types/application/vemmi,application/vemmi +http://www.iana.org/assignments/media-types/application/vnd.1000minds.decision-model+xml,application/vnd.1000minds.decision-model+xml +http://www.iana.org/assignments/media-types/application/vnd.1ob,application/vnd.1ob +http://www.iana.org/assignments/media-types/application/vnd.3M.Post-it-Notes,application/vnd.3M.Post-it-Notes +http://www.iana.org/assignments/media-types/application/vnd.3gpp-prose+xml,application/vnd.3gpp-prose+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp-prose-pc3a+xml,application/vnd.3gpp-prose-pc3a+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp-prose-pc3ach+xml,application/vnd.3gpp-prose-pc3ach+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp-prose-pc3ch+xml,application/vnd.3gpp-prose-pc3ch+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp-prose-pc8+xml,application/vnd.3gpp-prose-pc8+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp-v2x-local-service-information,application/vnd.3gpp-v2x-local-service-information +http://www.iana.org/assignments/media-types/application/vnd.3gpp.5gnas,application/vnd.3gpp.5gnas +http://www.iana.org/assignments/media-types/application/vnd.3gpp.5gsa2x,application/vnd.3gpp.5gsa2x +http://www.iana.org/assignments/media-types/application/vnd.3gpp.5gsa2x-local-service-information,application/vnd.3gpp.5gsa2x-local-service-information +http://www.iana.org/assignments/media-types/application/vnd.3gpp.GMOP+xml,application/vnd.3gpp.GMOP+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.SRVCC-info+xml,application/vnd.3gpp.SRVCC-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.access-transfer-events+xml,application/vnd.3gpp.access-transfer-events+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.bsf+xml,application/vnd.3gpp.bsf+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.crs+xml,application/vnd.3gpp.crs+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.current-location-discovery+xml,application/vnd.3gpp.current-location-discovery+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.gtpc,application/vnd.3gpp.gtpc +http://www.iana.org/assignments/media-types/application/vnd.3gpp.interworking-data,application/vnd.3gpp.interworking-data +http://www.iana.org/assignments/media-types/application/vnd.3gpp.lpp,application/vnd.3gpp.lpp +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mc-signalling-ear,application/vnd.3gpp.mc-signalling-ear +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-affiliation-command+xml,application/vnd.3gpp.mcdata-affiliation-command+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-info+xml,application/vnd.3gpp.mcdata-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml,application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-payload,application/vnd.3gpp.mcdata-payload +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-regroup+xml,application/vnd.3gpp.mcdata-regroup+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-service-config+xml,application/vnd.3gpp.mcdata-service-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-signalling,application/vnd.3gpp.mcdata-signalling +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-ue-config+xml,application/vnd.3gpp.mcdata-ue-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcdata-user-profile+xml,application/vnd.3gpp.mcdata-user-profile+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-affiliation-command+xml,application/vnd.3gpp.mcptt-affiliation-command+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-floor-request+xml,application/vnd.3gpp.mcptt-floor-request+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-info+xml,application/vnd.3gpp.mcptt-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-location-info+xml,application/vnd.3gpp.mcptt-location-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-mbms-usage-info+xml,application/vnd.3gpp.mcptt-mbms-usage-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-regroup+xml,application/vnd.3gpp.mcptt-regroup+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-service-config+xml,application/vnd.3gpp.mcptt-service-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-signed+xml,application/vnd.3gpp.mcptt-signed+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-ue-config+xml,application/vnd.3gpp.mcptt-ue-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-ue-init-config+xml,application/vnd.3gpp.mcptt-ue-init-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcptt-user-profile+xml,application/vnd.3gpp.mcptt-user-profile+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-affiliation-command+xml,application/vnd.3gpp.mcvideo-affiliation-command+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-affiliation-info+xml,application/vnd.3gpp.mcvideo-affiliation-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-info+xml,application/vnd.3gpp.mcvideo-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-location-info+xml,application/vnd.3gpp.mcvideo-location-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-mbms-usage-info+xml,application/vnd.3gpp.mcvideo-mbms-usage-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-regroup+xml,application/vnd.3gpp.mcvideo-regroup+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-service-config+xml,application/vnd.3gpp.mcvideo-service-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-transmission-request+xml,application/vnd.3gpp.mcvideo-transmission-request+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-ue-config+xml,application/vnd.3gpp.mcvideo-ue-config+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mcvideo-user-profile+xml,application/vnd.3gpp.mcvideo-user-profile+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.mid-call+xml,application/vnd.3gpp.mid-call+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.ngap,application/vnd.3gpp.ngap +http://www.iana.org/assignments/media-types/application/vnd.3gpp.pfcp,application/vnd.3gpp.pfcp +http://www.iana.org/assignments/media-types/application/vnd.3gpp.pic-bw-large,application/vnd.3gpp.pic-bw-large +http://www.iana.org/assignments/media-types/application/vnd.3gpp.pic-bw-small,application/vnd.3gpp.pic-bw-small +http://www.iana.org/assignments/media-types/application/vnd.3gpp.pic-bw-var,application/vnd.3gpp.pic-bw-var +http://www.iana.org/assignments/media-types/application/vnd.3gpp.pinapp-info+xml,application/vnd.3gpp.pinapp-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.s1ap,application/vnd.3gpp.s1ap +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-group-doc+xml,application/vnd.3gpp.seal-group-doc+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-info+xml,application/vnd.3gpp.seal-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-location-info+xml,application/vnd.3gpp.seal-location-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-mbms-usage-info+xml,application/vnd.3gpp.seal-mbms-usage-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-network-QoS-management-info+xml,application/vnd.3gpp.seal-network-QoS-management-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-ue-config-info+xml,application/vnd.3gpp.seal-ue-config-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-unicast-info+xml,application/vnd.3gpp.seal-unicast-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.seal-user-profile-info+xml,application/vnd.3gpp.seal-user-profile-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.sms,application/vnd.3gpp.sms +http://www.iana.org/assignments/media-types/application/vnd.3gpp.sms+xml,application/vnd.3gpp.sms+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.srvcc-ext+xml,application/vnd.3gpp.srvcc-ext+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.state-and-event-info+xml,application/vnd.3gpp.state-and-event-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.ussd+xml,application/vnd.3gpp.ussd+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp.v2x,application/vnd.3gpp.v2x +http://www.iana.org/assignments/media-types/application/vnd.3gpp.vae-info+xml,application/vnd.3gpp.vae-info+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp2.bcmcsinfo+xml,application/vnd.3gpp2.bcmcsinfo+xml +http://www.iana.org/assignments/media-types/application/vnd.3gpp2.sms,application/vnd.3gpp2.sms +http://www.iana.org/assignments/media-types/application/vnd.3gpp2.tcap,application/vnd.3gpp2.tcap +http://www.iana.org/assignments/media-types/application/vnd.3lightssoftware.imagescal,application/vnd.3lightssoftware.imagescal +http://www.iana.org/assignments/media-types/application/vnd.FloGraphIt,application/vnd.FloGraphIt +http://www.iana.org/assignments/media-types/application/vnd.HandHeld-Entertainment+xml,application/vnd.HandHeld-Entertainment+xml +http://www.iana.org/assignments/media-types/application/vnd.Kinar,application/vnd.Kinar +http://www.iana.org/assignments/media-types/application/vnd.MFER,application/vnd.MFER +http://www.iana.org/assignments/media-types/application/vnd.Mobius.DAF,application/vnd.Mobius.DAF +http://www.iana.org/assignments/media-types/application/vnd.Mobius.DIS,application/vnd.Mobius.DIS +http://www.iana.org/assignments/media-types/application/vnd.Mobius.MBK,application/vnd.Mobius.MBK +http://www.iana.org/assignments/media-types/application/vnd.Mobius.MQY,application/vnd.Mobius.MQY +http://www.iana.org/assignments/media-types/application/vnd.Mobius.MSL,application/vnd.Mobius.MSL +http://www.iana.org/assignments/media-types/application/vnd.Mobius.PLC,application/vnd.Mobius.PLC +http://www.iana.org/assignments/media-types/application/vnd.Mobius.TXF,application/vnd.Mobius.TXF +http://www.iana.org/assignments/media-types/application/vnd.Quark.QuarkXPress,application/vnd.Quark.QuarkXPress +http://www.iana.org/assignments/media-types/application/vnd.RenLearn.rlprint,application/vnd.RenLearn.rlprint +http://www.iana.org/assignments/media-types/application/vnd.SimTech-MindMapper,application/vnd.SimTech-MindMapper +http://www.iana.org/assignments/media-types/application/vnd.accpac.simply.aso,application/vnd.accpac.simply.aso +http://www.iana.org/assignments/media-types/application/vnd.accpac.simply.imp,application/vnd.accpac.simply.imp +http://www.iana.org/assignments/media-types/application/vnd.acm.addressxfer+json,application/vnd.acm.addressxfer+json +http://www.iana.org/assignments/media-types/application/vnd.acm.chatbot+json,application/vnd.acm.chatbot+json +http://www.iana.org/assignments/media-types/application/vnd.acucobol,application/vnd.acucobol +http://www.iana.org/assignments/media-types/application/vnd.acucorp,application/vnd.acucorp +http://www.iana.org/assignments/media-types/application/vnd.adobe.flash.movie,application/vnd.adobe.flash.movie +http://www.iana.org/assignments/media-types/application/vnd.adobe.formscentral.fcdt,application/vnd.adobe.formscentral.fcdt +http://www.iana.org/assignments/media-types/application/vnd.adobe.fxp,application/vnd.adobe.fxp +http://www.iana.org/assignments/media-types/application/vnd.adobe.partial-upload,application/vnd.adobe.partial-upload +http://www.iana.org/assignments/media-types/application/vnd.adobe.xdp+xml,application/vnd.adobe.xdp+xml +http://www.iana.org/assignments/media-types/application/vnd.aether.imp,application/vnd.aether.imp +http://www.iana.org/assignments/media-types/application/vnd.afpc.afplinedata,application/vnd.afpc.afplinedata +http://www.iana.org/assignments/media-types/application/vnd.afpc.afplinedata-pagedef,application/vnd.afpc.afplinedata-pagedef +http://www.iana.org/assignments/media-types/application/vnd.afpc.cmoca-cmresource,application/vnd.afpc.cmoca-cmresource +http://www.iana.org/assignments/media-types/application/vnd.afpc.foca-charset,application/vnd.afpc.foca-charset +http://www.iana.org/assignments/media-types/application/vnd.afpc.foca-codedfont,application/vnd.afpc.foca-codedfont +http://www.iana.org/assignments/media-types/application/vnd.afpc.foca-codepage,application/vnd.afpc.foca-codepage +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca,application/vnd.afpc.modca +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca-cmtable,application/vnd.afpc.modca-cmtable +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca-formdef,application/vnd.afpc.modca-formdef +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca-mediummap,application/vnd.afpc.modca-mediummap +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca-objectcontainer,application/vnd.afpc.modca-objectcontainer +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca-overlay,application/vnd.afpc.modca-overlay +http://www.iana.org/assignments/media-types/application/vnd.afpc.modca-pagesegment,application/vnd.afpc.modca-pagesegment +http://www.iana.org/assignments/media-types/application/vnd.age,application/vnd.age +http://www.iana.org/assignments/media-types/application/vnd.ah-barcode,application/vnd.ah-barcode +http://www.iana.org/assignments/media-types/application/vnd.ahead.space,application/vnd.ahead.space +http://www.iana.org/assignments/media-types/application/vnd.airzip.filesecure.azf,application/vnd.airzip.filesecure.azf +http://www.iana.org/assignments/media-types/application/vnd.airzip.filesecure.azs,application/vnd.airzip.filesecure.azs +http://www.iana.org/assignments/media-types/application/vnd.amadeus+json,application/vnd.amadeus+json +http://www.iana.org/assignments/media-types/application/vnd.amazon.mobi8-ebook,application/vnd.amazon.mobi8-ebook +http://www.iana.org/assignments/media-types/application/vnd.americandynamics.acc,application/vnd.americandynamics.acc +http://www.iana.org/assignments/media-types/application/vnd.amiga.ami,application/vnd.amiga.ami +http://www.iana.org/assignments/media-types/application/vnd.amundsen.maze+xml,application/vnd.amundsen.maze+xml +http://www.iana.org/assignments/media-types/application/vnd.android.ota,application/vnd.android.ota +http://www.iana.org/assignments/media-types/application/vnd.anki,application/vnd.anki +http://www.iana.org/assignments/media-types/application/vnd.anser-web-certificate-issue-initiation,application/vnd.anser-web-certificate-issue-initiation +http://www.iana.org/assignments/media-types/application/vnd.antix.game-component,application/vnd.antix.game-component +http://www.iana.org/assignments/media-types/application/vnd.apache.arrow.file,application/vnd.apache.arrow.file +http://www.iana.org/assignments/media-types/application/vnd.apache.arrow.stream,application/vnd.apache.arrow.stream +http://www.iana.org/assignments/media-types/application/vnd.apache.parquet,application/vnd.apache.parquet +http://www.iana.org/assignments/media-types/application/vnd.apache.thrift.binary,application/vnd.apache.thrift.binary +http://www.iana.org/assignments/media-types/application/vnd.apache.thrift.compact,application/vnd.apache.thrift.compact +http://www.iana.org/assignments/media-types/application/vnd.apache.thrift.json,application/vnd.apache.thrift.json +http://www.iana.org/assignments/media-types/application/vnd.apexlang,application/vnd.apexlang +http://www.iana.org/assignments/media-types/application/vnd.api+json,application/vnd.api+json +http://www.iana.org/assignments/media-types/application/vnd.aplextor.warrp+json,application/vnd.aplextor.warrp+json +http://www.iana.org/assignments/media-types/application/vnd.apothekende.reservation+json,application/vnd.apothekende.reservation+json +http://www.iana.org/assignments/media-types/application/vnd.apple.installer+xml,application/vnd.apple.installer+xml +http://www.iana.org/assignments/media-types/application/vnd.apple.keynote,application/vnd.apple.keynote +http://www.iana.org/assignments/media-types/application/vnd.apple.mpegurl,application/vnd.apple.mpegurl +http://www.iana.org/assignments/media-types/application/vnd.apple.numbers,application/vnd.apple.numbers +http://www.iana.org/assignments/media-types/application/vnd.apple.pages,application/vnd.apple.pages +http://www.iana.org/assignments/media-types/application/vnd.arastra.swi,application/vnd.arastra.swi +http://www.iana.org/assignments/media-types/application/vnd.aristanetworks.swi,application/vnd.aristanetworks.swi +http://www.iana.org/assignments/media-types/application/vnd.artisan+json,application/vnd.artisan+json +http://www.iana.org/assignments/media-types/application/vnd.artsquare,application/vnd.artsquare +http://www.iana.org/assignments/media-types/application/vnd.astraea-software.iota,application/vnd.astraea-software.iota +http://www.iana.org/assignments/media-types/application/vnd.audiograph,application/vnd.audiograph +http://www.iana.org/assignments/media-types/application/vnd.autopackage,application/vnd.autopackage +http://www.iana.org/assignments/media-types/application/vnd.avalon+json,application/vnd.avalon+json +http://www.iana.org/assignments/media-types/application/vnd.avistar+xml,application/vnd.avistar+xml +http://www.iana.org/assignments/media-types/application/vnd.balsamiq.bmml+xml,application/vnd.balsamiq.bmml+xml +http://www.iana.org/assignments/media-types/application/vnd.balsamiq.bmpr,application/vnd.balsamiq.bmpr +http://www.iana.org/assignments/media-types/application/vnd.banana-accounting,application/vnd.banana-accounting +http://www.iana.org/assignments/media-types/application/vnd.bbf.usp.error,application/vnd.bbf.usp.error +http://www.iana.org/assignments/media-types/application/vnd.bbf.usp.msg,application/vnd.bbf.usp.msg +http://www.iana.org/assignments/media-types/application/vnd.bbf.usp.msg+json,application/vnd.bbf.usp.msg+json +http://www.iana.org/assignments/media-types/application/vnd.bekitzur-stech+json,application/vnd.bekitzur-stech+json +http://www.iana.org/assignments/media-types/application/vnd.belightsoft.lhzd+zip,application/vnd.belightsoft.lhzd+zip +http://www.iana.org/assignments/media-types/application/vnd.belightsoft.lhzl+zip,application/vnd.belightsoft.lhzl+zip +http://www.iana.org/assignments/media-types/application/vnd.bint.med-content,application/vnd.bint.med-content +http://www.iana.org/assignments/media-types/application/vnd.biopax.rdf+xml,application/vnd.biopax.rdf+xml +http://www.iana.org/assignments/media-types/application/vnd.blink-idb-value-wrapper,application/vnd.blink-idb-value-wrapper +http://www.iana.org/assignments/media-types/application/vnd.blueice.multipass,application/vnd.blueice.multipass +http://www.iana.org/assignments/media-types/application/vnd.bluetooth.ep.oob,application/vnd.bluetooth.ep.oob +http://www.iana.org/assignments/media-types/application/vnd.bluetooth.le.oob,application/vnd.bluetooth.le.oob +http://www.iana.org/assignments/media-types/application/vnd.bmi,application/vnd.bmi +http://www.iana.org/assignments/media-types/application/vnd.bpf,application/vnd.bpf +http://www.iana.org/assignments/media-types/application/vnd.bpf3,application/vnd.bpf3 +http://www.iana.org/assignments/media-types/application/vnd.businessobjects,application/vnd.businessobjects +http://www.iana.org/assignments/media-types/application/vnd.byu.uapi+json,application/vnd.byu.uapi+json +http://www.iana.org/assignments/media-types/application/vnd.bzip3,application/vnd.bzip3 +http://www.iana.org/assignments/media-types/application/vnd.c3voc.schedule+xml,application/vnd.c3voc.schedule+xml +http://www.iana.org/assignments/media-types/application/vnd.cab-jscript,application/vnd.cab-jscript +http://www.iana.org/assignments/media-types/application/vnd.canon-cpdl,application/vnd.canon-cpdl +http://www.iana.org/assignments/media-types/application/vnd.canon-lips,application/vnd.canon-lips +http://www.iana.org/assignments/media-types/application/vnd.capasystems-pg+json,application/vnd.capasystems-pg+json +http://www.iana.org/assignments/media-types/application/vnd.cendio.thinlinc.clientconf,application/vnd.cendio.thinlinc.clientconf +http://www.iana.org/assignments/media-types/application/vnd.century-systems.tcp_stream,application/vnd.century-systems.tcp_stream +http://www.iana.org/assignments/media-types/application/vnd.chemdraw+xml,application/vnd.chemdraw+xml +http://www.iana.org/assignments/media-types/application/vnd.chess-pgn,application/vnd.chess-pgn +http://www.iana.org/assignments/media-types/application/vnd.chipnuts.karaoke-mmd,application/vnd.chipnuts.karaoke-mmd +http://www.iana.org/assignments/media-types/application/vnd.ciedi,application/vnd.ciedi +http://www.iana.org/assignments/media-types/application/vnd.cinderella,application/vnd.cinderella +http://www.iana.org/assignments/media-types/application/vnd.cirpack.isdn-ext,application/vnd.cirpack.isdn-ext +http://www.iana.org/assignments/media-types/application/vnd.citationstyles.style+xml,application/vnd.citationstyles.style+xml +http://www.iana.org/assignments/media-types/application/vnd.claymore,application/vnd.claymore +http://www.iana.org/assignments/media-types/application/vnd.cloanto.rp9,application/vnd.cloanto.rp9 +http://www.iana.org/assignments/media-types/application/vnd.clonk.c4group,application/vnd.clonk.c4group +http://www.iana.org/assignments/media-types/application/vnd.cluetrust.cartomobile-config,application/vnd.cluetrust.cartomobile-config +http://www.iana.org/assignments/media-types/application/vnd.cluetrust.cartomobile-config-pkg,application/vnd.cluetrust.cartomobile-config-pkg +http://www.iana.org/assignments/media-types/application/vnd.cncf.helm.chart.content.v1.tar+gzip,application/vnd.cncf.helm.chart.content.v1.tar+gzip +http://www.iana.org/assignments/media-types/application/vnd.cncf.helm.chart.provenance.v1.prov,application/vnd.cncf.helm.chart.provenance.v1.prov +http://www.iana.org/assignments/media-types/application/vnd.cncf.helm.config.v1+json,application/vnd.cncf.helm.config.v1+json +http://www.iana.org/assignments/media-types/application/vnd.coffeescript,application/vnd.coffeescript +http://www.iana.org/assignments/media-types/application/vnd.collabio.xodocuments.document,application/vnd.collabio.xodocuments.document +http://www.iana.org/assignments/media-types/application/vnd.collabio.xodocuments.document-template,application/vnd.collabio.xodocuments.document-template +http://www.iana.org/assignments/media-types/application/vnd.collabio.xodocuments.presentation,application/vnd.collabio.xodocuments.presentation +http://www.iana.org/assignments/media-types/application/vnd.collabio.xodocuments.presentation-template,application/vnd.collabio.xodocuments.presentation-template +http://www.iana.org/assignments/media-types/application/vnd.collabio.xodocuments.spreadsheet,application/vnd.collabio.xodocuments.spreadsheet +http://www.iana.org/assignments/media-types/application/vnd.collabio.xodocuments.spreadsheet-template,application/vnd.collabio.xodocuments.spreadsheet-template +http://www.iana.org/assignments/media-types/application/vnd.collection+json,application/vnd.collection+json +http://www.iana.org/assignments/media-types/application/vnd.collection.doc+json,application/vnd.collection.doc+json +http://www.iana.org/assignments/media-types/application/vnd.collection.next+json,application/vnd.collection.next+json +http://www.iana.org/assignments/media-types/application/vnd.comicbook+zip,application/vnd.comicbook+zip +http://www.iana.org/assignments/media-types/application/vnd.comicbook-rar,application/vnd.comicbook-rar +http://www.iana.org/assignments/media-types/application/vnd.commerce-battelle,application/vnd.commerce-battelle +http://www.iana.org/assignments/media-types/application/vnd.commonspace,application/vnd.commonspace +http://www.iana.org/assignments/media-types/application/vnd.contact.cmsg,application/vnd.contact.cmsg +http://www.iana.org/assignments/media-types/application/vnd.coreos.ignition+json,application/vnd.coreos.ignition+json +http://www.iana.org/assignments/media-types/application/vnd.cosmocaller,application/vnd.cosmocaller +http://www.iana.org/assignments/media-types/application/vnd.crick.clicker,application/vnd.crick.clicker +http://www.iana.org/assignments/media-types/application/vnd.crick.clicker.keyboard,application/vnd.crick.clicker.keyboard +http://www.iana.org/assignments/media-types/application/vnd.crick.clicker.palette,application/vnd.crick.clicker.palette +http://www.iana.org/assignments/media-types/application/vnd.crick.clicker.template,application/vnd.crick.clicker.template +http://www.iana.org/assignments/media-types/application/vnd.crick.clicker.wordbank,application/vnd.crick.clicker.wordbank +http://www.iana.org/assignments/media-types/application/vnd.criticaltools.wbs+xml,application/vnd.criticaltools.wbs+xml +http://www.iana.org/assignments/media-types/application/vnd.cryptii.pipe+json,application/vnd.cryptii.pipe+json +http://www.iana.org/assignments/media-types/application/vnd.crypto-shade-file,application/vnd.crypto-shade-file +http://www.iana.org/assignments/media-types/application/vnd.cryptomator.encrypted,application/vnd.cryptomator.encrypted +http://www.iana.org/assignments/media-types/application/vnd.cryptomator.vault,application/vnd.cryptomator.vault +http://www.iana.org/assignments/media-types/application/vnd.ctc-posml,application/vnd.ctc-posml +http://www.iana.org/assignments/media-types/application/vnd.ctct.ws+xml,application/vnd.ctct.ws+xml +http://www.iana.org/assignments/media-types/application/vnd.cups-pdf,application/vnd.cups-pdf +http://www.iana.org/assignments/media-types/application/vnd.cups-postscript,application/vnd.cups-postscript +http://www.iana.org/assignments/media-types/application/vnd.cups-ppd,application/vnd.cups-ppd +http://www.iana.org/assignments/media-types/application/vnd.cups-raster,application/vnd.cups-raster +http://www.iana.org/assignments/media-types/application/vnd.cups-raw,application/vnd.cups-raw +http://www.iana.org/assignments/media-types/application/vnd.curl,application/vnd.curl +http://www.iana.org/assignments/media-types/application/vnd.cyan.dean.root+xml,application/vnd.cyan.dean.root+xml +http://www.iana.org/assignments/media-types/application/vnd.cybank,application/vnd.cybank +http://www.iana.org/assignments/media-types/application/vnd.cyclonedx+json,application/vnd.cyclonedx+json +http://www.iana.org/assignments/media-types/application/vnd.cyclonedx+xml,application/vnd.cyclonedx+xml +http://www.iana.org/assignments/media-types/application/vnd.d2l.coursepackage1p0+zip,application/vnd.d2l.coursepackage1p0+zip +http://www.iana.org/assignments/media-types/application/vnd.d3m-dataset,application/vnd.d3m-dataset +http://www.iana.org/assignments/media-types/application/vnd.d3m-problem,application/vnd.d3m-problem +http://www.iana.org/assignments/media-types/application/vnd.dart,application/vnd.dart +http://www.iana.org/assignments/media-types/application/vnd.data-vision.rdz,application/vnd.data-vision.rdz +http://www.iana.org/assignments/media-types/application/vnd.datalog,application/vnd.datalog +http://www.iana.org/assignments/media-types/application/vnd.datapackage+json,application/vnd.datapackage+json +http://www.iana.org/assignments/media-types/application/vnd.dataresource+json,application/vnd.dataresource+json +http://www.iana.org/assignments/media-types/application/vnd.dbf,application/vnd.dbf +http://www.iana.org/assignments/media-types/application/vnd.debian.binary-package,application/vnd.debian.binary-package +http://www.iana.org/assignments/media-types/application/vnd.dece.data,application/vnd.dece.data +http://www.iana.org/assignments/media-types/application/vnd.dece.ttml+xml,application/vnd.dece.ttml+xml +http://www.iana.org/assignments/media-types/application/vnd.dece.unspecified,application/vnd.dece.unspecified +http://www.iana.org/assignments/media-types/application/vnd.dece.zip,application/vnd.dece.zip +http://www.iana.org/assignments/media-types/application/vnd.denovo.fcselayout-link,application/vnd.denovo.fcselayout-link +http://www.iana.org/assignments/media-types/application/vnd.desmume.movie,application/vnd.desmume.movie +http://www.iana.org/assignments/media-types/application/vnd.dir-bi.plate-dl-nosuffix,application/vnd.dir-bi.plate-dl-nosuffix +http://www.iana.org/assignments/media-types/application/vnd.dm.delegation+xml,application/vnd.dm.delegation+xml +http://www.iana.org/assignments/media-types/application/vnd.dna,application/vnd.dna +http://www.iana.org/assignments/media-types/application/vnd.document+json,application/vnd.document+json +http://www.iana.org/assignments/media-types/application/vnd.dolby.mobile.1,application/vnd.dolby.mobile.1 +http://www.iana.org/assignments/media-types/application/vnd.dolby.mobile.2,application/vnd.dolby.mobile.2 +http://www.iana.org/assignments/media-types/application/vnd.doremir.scorecloud-binary-document,application/vnd.doremir.scorecloud-binary-document +http://www.iana.org/assignments/media-types/application/vnd.dpgraph,application/vnd.dpgraph +http://www.iana.org/assignments/media-types/application/vnd.dreamfactory,application/vnd.dreamfactory +http://www.iana.org/assignments/media-types/application/vnd.drive+json,application/vnd.drive+json +http://www.iana.org/assignments/media-types/application/vnd.dtg.local,application/vnd.dtg.local +http://www.iana.org/assignments/media-types/application/vnd.dtg.local.flash,application/vnd.dtg.local.flash +http://www.iana.org/assignments/media-types/application/vnd.dtg.local.html,application/vnd.dtg.local.html +http://www.iana.org/assignments/media-types/application/vnd.dvb.ait,application/vnd.dvb.ait +http://www.iana.org/assignments/media-types/application/vnd.dvb.dvbisl+xml,application/vnd.dvb.dvbisl+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.dvbj,application/vnd.dvb.dvbj +http://www.iana.org/assignments/media-types/application/vnd.dvb.esgcontainer,application/vnd.dvb.esgcontainer +http://www.iana.org/assignments/media-types/application/vnd.dvb.ipdcdftnotifaccess,application/vnd.dvb.ipdcdftnotifaccess +http://www.iana.org/assignments/media-types/application/vnd.dvb.ipdcesgaccess,application/vnd.dvb.ipdcesgaccess +http://www.iana.org/assignments/media-types/application/vnd.dvb.ipdcesgaccess2,application/vnd.dvb.ipdcesgaccess2 +http://www.iana.org/assignments/media-types/application/vnd.dvb.ipdcesgpdd,application/vnd.dvb.ipdcesgpdd +http://www.iana.org/assignments/media-types/application/vnd.dvb.ipdcroaming,application/vnd.dvb.ipdcroaming +http://www.iana.org/assignments/media-types/application/vnd.dvb.iptv.alfec-base,application/vnd.dvb.iptv.alfec-base +http://www.iana.org/assignments/media-types/application/vnd.dvb.iptv.alfec-enhancement,application/vnd.dvb.iptv.alfec-enhancement +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-aggregate-root+xml,application/vnd.dvb.notif-aggregate-root+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-container+xml,application/vnd.dvb.notif-container+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-generic+xml,application/vnd.dvb.notif-generic+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-ia-msglist+xml,application/vnd.dvb.notif-ia-msglist+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-ia-registration-request+xml,application/vnd.dvb.notif-ia-registration-request+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-ia-registration-response+xml,application/vnd.dvb.notif-ia-registration-response+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.notif-init+xml,application/vnd.dvb.notif-init+xml +http://www.iana.org/assignments/media-types/application/vnd.dvb.pfr,application/vnd.dvb.pfr +http://www.iana.org/assignments/media-types/application/vnd.dvb.service,application/vnd.dvb.service +http://www.iana.org/assignments/media-types/application/vnd.dxr,application/vnd.dxr +http://www.iana.org/assignments/media-types/application/vnd.dynageo,application/vnd.dynageo +http://www.iana.org/assignments/media-types/application/vnd.dzr,application/vnd.dzr +http://www.iana.org/assignments/media-types/application/vnd.easykaraoke.cdgdownload,application/vnd.easykaraoke.cdgdownload +http://www.iana.org/assignments/media-types/application/vnd.ecdis-update,application/vnd.ecdis-update +http://www.iana.org/assignments/media-types/application/vnd.ecip.rlp,application/vnd.ecip.rlp +http://www.iana.org/assignments/media-types/application/vnd.eclipse.ditto+json,application/vnd.eclipse.ditto+json +http://www.iana.org/assignments/media-types/application/vnd.ecowin.chart,application/vnd.ecowin.chart +http://www.iana.org/assignments/media-types/application/vnd.ecowin.filerequest,application/vnd.ecowin.filerequest +http://www.iana.org/assignments/media-types/application/vnd.ecowin.fileupdate,application/vnd.ecowin.fileupdate +http://www.iana.org/assignments/media-types/application/vnd.ecowin.series,application/vnd.ecowin.series +http://www.iana.org/assignments/media-types/application/vnd.ecowin.seriesrequest,application/vnd.ecowin.seriesrequest +http://www.iana.org/assignments/media-types/application/vnd.ecowin.seriesupdate,application/vnd.ecowin.seriesupdate +http://www.iana.org/assignments/media-types/application/vnd.efi.img,application/vnd.efi.img +http://www.iana.org/assignments/media-types/application/vnd.efi.iso,application/vnd.efi.iso +http://www.iana.org/assignments/media-types/application/vnd.eln+zip,application/vnd.eln+zip +http://www.iana.org/assignments/media-types/application/vnd.emclient.accessrequest+xml,application/vnd.emclient.accessrequest+xml +http://www.iana.org/assignments/media-types/application/vnd.enliven,application/vnd.enliven +http://www.iana.org/assignments/media-types/application/vnd.enphase.envoy,application/vnd.enphase.envoy +http://www.iana.org/assignments/media-types/application/vnd.eprints.data+xml,application/vnd.eprints.data+xml +http://www.iana.org/assignments/media-types/application/vnd.epson.esf,application/vnd.epson.esf +http://www.iana.org/assignments/media-types/application/vnd.epson.msf,application/vnd.epson.msf +http://www.iana.org/assignments/media-types/application/vnd.epson.quickanime,application/vnd.epson.quickanime +http://www.iana.org/assignments/media-types/application/vnd.epson.salt,application/vnd.epson.salt +http://www.iana.org/assignments/media-types/application/vnd.epson.ssf,application/vnd.epson.ssf +http://www.iana.org/assignments/media-types/application/vnd.ericsson.quickcall,application/vnd.ericsson.quickcall +http://www.iana.org/assignments/media-types/application/vnd.erofs,application/vnd.erofs +http://www.iana.org/assignments/media-types/application/vnd.espass-espass+zip,application/vnd.espass-espass+zip +http://www.iana.org/assignments/media-types/application/vnd.eszigno3+xml,application/vnd.eszigno3+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.aoc+xml,application/vnd.etsi.aoc+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.asic-e+zip,application/vnd.etsi.asic-e+zip +http://www.iana.org/assignments/media-types/application/vnd.etsi.asic-s+zip,application/vnd.etsi.asic-s+zip +http://www.iana.org/assignments/media-types/application/vnd.etsi.cug+xml,application/vnd.etsi.cug+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvcommand+xml,application/vnd.etsi.iptvcommand+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvdiscovery+xml,application/vnd.etsi.iptvdiscovery+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvprofile+xml,application/vnd.etsi.iptvprofile+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvsad-bc+xml,application/vnd.etsi.iptvsad-bc+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvsad-cod+xml,application/vnd.etsi.iptvsad-cod+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvsad-npvr+xml,application/vnd.etsi.iptvsad-npvr+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvservice+xml,application/vnd.etsi.iptvservice+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvsync+xml,application/vnd.etsi.iptvsync+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.iptvueprofile+xml,application/vnd.etsi.iptvueprofile+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.mcid+xml,application/vnd.etsi.mcid+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.mheg5,application/vnd.etsi.mheg5 +http://www.iana.org/assignments/media-types/application/vnd.etsi.overload-control-policy-dataset+xml,application/vnd.etsi.overload-control-policy-dataset+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.pstn+xml,application/vnd.etsi.pstn+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.sci+xml,application/vnd.etsi.sci+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.simservs+xml,application/vnd.etsi.simservs+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.timestamp-token,application/vnd.etsi.timestamp-token +http://www.iana.org/assignments/media-types/application/vnd.etsi.tsl+xml,application/vnd.etsi.tsl+xml +http://www.iana.org/assignments/media-types/application/vnd.etsi.tsl.der,application/vnd.etsi.tsl.der +http://www.iana.org/assignments/media-types/application/vnd.eu.kasparian.car+json,application/vnd.eu.kasparian.car+json +http://www.iana.org/assignments/media-types/application/vnd.eudora.data,application/vnd.eudora.data +http://www.iana.org/assignments/media-types/application/vnd.evolv.ecig.profile,application/vnd.evolv.ecig.profile +http://www.iana.org/assignments/media-types/application/vnd.evolv.ecig.settings,application/vnd.evolv.ecig.settings +http://www.iana.org/assignments/media-types/application/vnd.evolv.ecig.theme,application/vnd.evolv.ecig.theme +http://www.iana.org/assignments/media-types/application/vnd.exstream-empower+zip,application/vnd.exstream-empower+zip +http://www.iana.org/assignments/media-types/application/vnd.exstream-package,application/vnd.exstream-package +http://www.iana.org/assignments/media-types/application/vnd.ezpix-album,application/vnd.ezpix-album +http://www.iana.org/assignments/media-types/application/vnd.ezpix-package,application/vnd.ezpix-package +http://www.iana.org/assignments/media-types/application/vnd.f-secure.mobile,application/vnd.f-secure.mobile +http://www.iana.org/assignments/media-types/application/vnd.familysearch.gedcom+zip,application/vnd.familysearch.gedcom+zip +http://www.iana.org/assignments/media-types/application/vnd.fastcopy-disk-image,application/vnd.fastcopy-disk-image +http://www.iana.org/assignments/media-types/application/vnd.fdsn.mseed,application/vnd.fdsn.mseed +http://www.iana.org/assignments/media-types/application/vnd.fdsn.seed,application/vnd.fdsn.seed +http://www.iana.org/assignments/media-types/application/vnd.ffsns,application/vnd.ffsns +http://www.iana.org/assignments/media-types/application/vnd.ficlab.flb+zip,application/vnd.ficlab.flb+zip +http://www.iana.org/assignments/media-types/application/vnd.filmit.zfc,application/vnd.filmit.zfc +http://www.iana.org/assignments/media-types/application/vnd.fints,application/vnd.fints +http://www.iana.org/assignments/media-types/application/vnd.firemonkeys.cloudcell,application/vnd.firemonkeys.cloudcell +http://www.iana.org/assignments/media-types/application/vnd.fluxtime.clip,application/vnd.fluxtime.clip +http://www.iana.org/assignments/media-types/application/vnd.font-fontforge-sfd,application/vnd.font-fontforge-sfd +http://www.iana.org/assignments/media-types/application/vnd.framemaker,application/vnd.framemaker +http://www.iana.org/assignments/media-types/application/vnd.freelog.comic,application/vnd.freelog.comic +http://www.iana.org/assignments/media-types/application/vnd.frogans.fnc,application/vnd.frogans.fnc +http://www.iana.org/assignments/media-types/application/vnd.frogans.ltf,application/vnd.frogans.ltf +http://www.iana.org/assignments/media-types/application/vnd.fsc.weblaunch,application/vnd.fsc.weblaunch +http://www.iana.org/assignments/media-types/application/vnd.fujifilm.fb.docuworks,application/vnd.fujifilm.fb.docuworks +http://www.iana.org/assignments/media-types/application/vnd.fujifilm.fb.docuworks.binder,application/vnd.fujifilm.fb.docuworks.binder +http://www.iana.org/assignments/media-types/application/vnd.fujifilm.fb.docuworks.container,application/vnd.fujifilm.fb.docuworks.container +http://www.iana.org/assignments/media-types/application/vnd.fujifilm.fb.jfi+xml,application/vnd.fujifilm.fb.jfi+xml +http://www.iana.org/assignments/media-types/application/vnd.fujitsu.oasys,application/vnd.fujitsu.oasys +http://www.iana.org/assignments/media-types/application/vnd.fujitsu.oasys2,application/vnd.fujitsu.oasys2 +http://www.iana.org/assignments/media-types/application/vnd.fujitsu.oasys3,application/vnd.fujitsu.oasys3 +http://www.iana.org/assignments/media-types/application/vnd.fujitsu.oasysgp,application/vnd.fujitsu.oasysgp +http://www.iana.org/assignments/media-types/application/vnd.fujitsu.oasysprs,application/vnd.fujitsu.oasysprs +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.ART-EX,application/vnd.fujixerox.ART-EX +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.ART4,application/vnd.fujixerox.ART4 +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.HBPL,application/vnd.fujixerox.HBPL +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.ddd,application/vnd.fujixerox.ddd +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.docuworks,application/vnd.fujixerox.docuworks +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.docuworks.binder,application/vnd.fujixerox.docuworks.binder +http://www.iana.org/assignments/media-types/application/vnd.fujixerox.docuworks.container,application/vnd.fujixerox.docuworks.container +http://www.iana.org/assignments/media-types/application/vnd.fut-misnet,application/vnd.fut-misnet +http://www.iana.org/assignments/media-types/application/vnd.futoin+cbor,application/vnd.futoin+cbor +http://www.iana.org/assignments/media-types/application/vnd.futoin+json,application/vnd.futoin+json +http://www.iana.org/assignments/media-types/application/vnd.fuzzysheet,application/vnd.fuzzysheet +http://www.iana.org/assignments/media-types/application/vnd.ga4gh.passport+jwt,application/vnd.ga4gh.passport+jwt +http://www.iana.org/assignments/media-types/application/vnd.genomatix.tuxedo,application/vnd.genomatix.tuxedo +http://www.iana.org/assignments/media-types/application/vnd.genozip,application/vnd.genozip +http://www.iana.org/assignments/media-types/application/vnd.gentics.grd+json,application/vnd.gentics.grd+json +http://www.iana.org/assignments/media-types/application/vnd.gentoo.catmetadata+xml,application/vnd.gentoo.catmetadata+xml +http://www.iana.org/assignments/media-types/application/vnd.gentoo.ebuild,application/vnd.gentoo.ebuild +http://www.iana.org/assignments/media-types/application/vnd.gentoo.eclass,application/vnd.gentoo.eclass +http://www.iana.org/assignments/media-types/application/vnd.gentoo.gpkg,application/vnd.gentoo.gpkg +http://www.iana.org/assignments/media-types/application/vnd.gentoo.manifest,application/vnd.gentoo.manifest +http://www.iana.org/assignments/media-types/application/vnd.gentoo.pkgmetadata+xml,application/vnd.gentoo.pkgmetadata+xml +http://www.iana.org/assignments/media-types/application/vnd.gentoo.xpak,application/vnd.gentoo.xpak +http://www.iana.org/assignments/media-types/application/vnd.geo+json,application/vnd.geo+json +http://www.iana.org/assignments/media-types/application/vnd.geocube+xml,application/vnd.geocube+xml +http://www.iana.org/assignments/media-types/application/vnd.geogebra.file,application/vnd.geogebra.file +http://www.iana.org/assignments/media-types/application/vnd.geogebra.slides,application/vnd.geogebra.slides +http://www.iana.org/assignments/media-types/application/vnd.geogebra.tool,application/vnd.geogebra.tool +http://www.iana.org/assignments/media-types/application/vnd.geometry-explorer,application/vnd.geometry-explorer +http://www.iana.org/assignments/media-types/application/vnd.geonext,application/vnd.geonext +http://www.iana.org/assignments/media-types/application/vnd.geoplan,application/vnd.geoplan +http://www.iana.org/assignments/media-types/application/vnd.geospace,application/vnd.geospace +http://www.iana.org/assignments/media-types/application/vnd.gerber,application/vnd.gerber +http://www.iana.org/assignments/media-types/application/vnd.globalplatform.card-content-mgt,application/vnd.globalplatform.card-content-mgt +http://www.iana.org/assignments/media-types/application/vnd.globalplatform.card-content-mgt-response,application/vnd.globalplatform.card-content-mgt-response +http://www.iana.org/assignments/media-types/application/vnd.gmx,application/vnd.gmx +http://www.iana.org/assignments/media-types/application/vnd.gnu.taler.exchange+json,application/vnd.gnu.taler.exchange+json +http://www.iana.org/assignments/media-types/application/vnd.gnu.taler.merchant+json,application/vnd.gnu.taler.merchant+json +http://www.iana.org/assignments/media-types/application/vnd.google-earth.kml+xml,application/vnd.google-earth.kml+xml +http://www.iana.org/assignments/media-types/application/vnd.google-earth.kmz,application/vnd.google-earth.kmz +http://www.iana.org/assignments/media-types/application/vnd.gov.sk.e-form+xml,application/vnd.gov.sk.e-form+xml +http://www.iana.org/assignments/media-types/application/vnd.gov.sk.e-form+zip,application/vnd.gov.sk.e-form+zip +http://www.iana.org/assignments/media-types/application/vnd.gov.sk.xmldatacontainer+xml,application/vnd.gov.sk.xmldatacontainer+xml +http://www.iana.org/assignments/media-types/application/vnd.gpxsee.map+xml,application/vnd.gpxsee.map+xml +http://www.iana.org/assignments/media-types/application/vnd.grafeq,application/vnd.grafeq +http://www.iana.org/assignments/media-types/application/vnd.gridmp,application/vnd.gridmp +http://www.iana.org/assignments/media-types/application/vnd.groove-account,application/vnd.groove-account +http://www.iana.org/assignments/media-types/application/vnd.groove-help,application/vnd.groove-help +http://www.iana.org/assignments/media-types/application/vnd.groove-identity-message,application/vnd.groove-identity-message +http://www.iana.org/assignments/media-types/application/vnd.groove-injector,application/vnd.groove-injector +http://www.iana.org/assignments/media-types/application/vnd.groove-tool-message,application/vnd.groove-tool-message +http://www.iana.org/assignments/media-types/application/vnd.groove-tool-template,application/vnd.groove-tool-template +http://www.iana.org/assignments/media-types/application/vnd.groove-vcard,application/vnd.groove-vcard +http://www.iana.org/assignments/media-types/application/vnd.hal+json,application/vnd.hal+json +http://www.iana.org/assignments/media-types/application/vnd.hal+xml,application/vnd.hal+xml +http://www.iana.org/assignments/media-types/application/vnd.hbci,application/vnd.hbci +http://www.iana.org/assignments/media-types/application/vnd.hc+json,application/vnd.hc+json +http://www.iana.org/assignments/media-types/application/vnd.hcl-bireports,application/vnd.hcl-bireports +http://www.iana.org/assignments/media-types/application/vnd.hdt,application/vnd.hdt +http://www.iana.org/assignments/media-types/application/vnd.heroku+json,application/vnd.heroku+json +http://www.iana.org/assignments/media-types/application/vnd.hhe.lesson-player,application/vnd.hhe.lesson-player +http://www.iana.org/assignments/media-types/application/vnd.hp-HPGL,application/vnd.hp-HPGL +http://www.iana.org/assignments/media-types/application/vnd.hp-PCL,application/vnd.hp-PCL +http://www.iana.org/assignments/media-types/application/vnd.hp-PCLXL,application/vnd.hp-PCLXL +http://www.iana.org/assignments/media-types/application/vnd.hp-hpid,application/vnd.hp-hpid +http://www.iana.org/assignments/media-types/application/vnd.hp-hps,application/vnd.hp-hps +http://www.iana.org/assignments/media-types/application/vnd.hp-jlyt,application/vnd.hp-jlyt +http://www.iana.org/assignments/media-types/application/vnd.hsl,application/vnd.hsl +http://www.iana.org/assignments/media-types/application/vnd.httphone,application/vnd.httphone +http://www.iana.org/assignments/media-types/application/vnd.hydrostatix.sof-data,application/vnd.hydrostatix.sof-data +http://www.iana.org/assignments/media-types/application/vnd.hyper+json,application/vnd.hyper+json +http://www.iana.org/assignments/media-types/application/vnd.hyper-item+json,application/vnd.hyper-item+json +http://www.iana.org/assignments/media-types/application/vnd.hyperdrive+json,application/vnd.hyperdrive+json +http://www.iana.org/assignments/media-types/application/vnd.hzn-3d-crossword,application/vnd.hzn-3d-crossword +http://www.iana.org/assignments/media-types/application/vnd.ibm.MiniPay,application/vnd.ibm.MiniPay +http://www.iana.org/assignments/media-types/application/vnd.ibm.afplinedata,application/vnd.ibm.afplinedata +http://www.iana.org/assignments/media-types/application/vnd.ibm.electronic-media,application/vnd.ibm.electronic-media +http://www.iana.org/assignments/media-types/application/vnd.ibm.modcap,application/vnd.ibm.modcap +http://www.iana.org/assignments/media-types/application/vnd.ibm.rights-management,application/vnd.ibm.rights-management +http://www.iana.org/assignments/media-types/application/vnd.ibm.secure-container,application/vnd.ibm.secure-container +http://www.iana.org/assignments/media-types/application/vnd.iccprofile,application/vnd.iccprofile +http://www.iana.org/assignments/media-types/application/vnd.ieee.1905,application/vnd.ieee.1905 +http://www.iana.org/assignments/media-types/application/vnd.igloader,application/vnd.igloader +http://www.iana.org/assignments/media-types/application/vnd.imagemeter.folder+zip,application/vnd.imagemeter.folder+zip +http://www.iana.org/assignments/media-types/application/vnd.imagemeter.image+zip,application/vnd.imagemeter.image+zip +http://www.iana.org/assignments/media-types/application/vnd.immervision-ivp,application/vnd.immervision-ivp +http://www.iana.org/assignments/media-types/application/vnd.immervision-ivu,application/vnd.immervision-ivu +http://www.iana.org/assignments/media-types/application/vnd.ims.imsccv1p1,application/vnd.ims.imsccv1p1 +http://www.iana.org/assignments/media-types/application/vnd.ims.imsccv1p2,application/vnd.ims.imsccv1p2 +http://www.iana.org/assignments/media-types/application/vnd.ims.imsccv1p3,application/vnd.ims.imsccv1p3 +http://www.iana.org/assignments/media-types/application/vnd.ims.lis.v2.result+json,application/vnd.ims.lis.v2.result+json +http://www.iana.org/assignments/media-types/application/vnd.ims.lti.v2.toolconsumerprofile+json,application/vnd.ims.lti.v2.toolconsumerprofile+json +http://www.iana.org/assignments/media-types/application/vnd.ims.lti.v2.toolproxy+json,application/vnd.ims.lti.v2.toolproxy+json +http://www.iana.org/assignments/media-types/application/vnd.ims.lti.v2.toolproxy.id+json,application/vnd.ims.lti.v2.toolproxy.id+json +http://www.iana.org/assignments/media-types/application/vnd.ims.lti.v2.toolsettings+json,application/vnd.ims.lti.v2.toolsettings+json +http://www.iana.org/assignments/media-types/application/vnd.ims.lti.v2.toolsettings.simple+json,application/vnd.ims.lti.v2.toolsettings.simple+json +http://www.iana.org/assignments/media-types/application/vnd.informedcontrol.rms+xml,application/vnd.informedcontrol.rms+xml +http://www.iana.org/assignments/media-types/application/vnd.informix-visionary,application/vnd.informix-visionary +http://www.iana.org/assignments/media-types/application/vnd.infotech.project,application/vnd.infotech.project +http://www.iana.org/assignments/media-types/application/vnd.infotech.project+xml,application/vnd.infotech.project+xml +http://www.iana.org/assignments/media-types/application/vnd.innopath.wamp.notification,application/vnd.innopath.wamp.notification +http://www.iana.org/assignments/media-types/application/vnd.insors.igm,application/vnd.insors.igm +http://www.iana.org/assignments/media-types/application/vnd.intercon.formnet,application/vnd.intercon.formnet +http://www.iana.org/assignments/media-types/application/vnd.intergeo,application/vnd.intergeo +http://www.iana.org/assignments/media-types/application/vnd.intertrust.digibox,application/vnd.intertrust.digibox +http://www.iana.org/assignments/media-types/application/vnd.intertrust.nncp,application/vnd.intertrust.nncp +http://www.iana.org/assignments/media-types/application/vnd.intu.qbo,application/vnd.intu.qbo +http://www.iana.org/assignments/media-types/application/vnd.intu.qfx,application/vnd.intu.qfx +http://www.iana.org/assignments/media-types/application/vnd.ipfs.ipns-record,application/vnd.ipfs.ipns-record +http://www.iana.org/assignments/media-types/application/vnd.ipld.car,application/vnd.ipld.car +http://www.iana.org/assignments/media-types/application/vnd.ipld.dag-cbor,application/vnd.ipld.dag-cbor +http://www.iana.org/assignments/media-types/application/vnd.ipld.dag-json,application/vnd.ipld.dag-json +http://www.iana.org/assignments/media-types/application/vnd.ipld.raw,application/vnd.ipld.raw +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.catalogitem+xml,application/vnd.iptc.g2.catalogitem+xml +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.conceptitem+xml,application/vnd.iptc.g2.conceptitem+xml +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.knowledgeitem+xml,application/vnd.iptc.g2.knowledgeitem+xml +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.newsitem+xml,application/vnd.iptc.g2.newsitem+xml +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.newsmessage+xml,application/vnd.iptc.g2.newsmessage+xml +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.packageitem+xml,application/vnd.iptc.g2.packageitem+xml +http://www.iana.org/assignments/media-types/application/vnd.iptc.g2.planningitem+xml,application/vnd.iptc.g2.planningitem+xml +http://www.iana.org/assignments/media-types/application/vnd.ipunplugged.rcprofile,application/vnd.ipunplugged.rcprofile +http://www.iana.org/assignments/media-types/application/vnd.irepository.package+xml,application/vnd.irepository.package+xml +http://www.iana.org/assignments/media-types/application/vnd.is-xpr,application/vnd.is-xpr +http://www.iana.org/assignments/media-types/application/vnd.isac.fcs,application/vnd.isac.fcs +http://www.iana.org/assignments/media-types/application/vnd.iso11783-10+zip,application/vnd.iso11783-10+zip +http://www.iana.org/assignments/media-types/application/vnd.jam,application/vnd.jam +http://www.iana.org/assignments/media-types/application/vnd.japannet-directory-service,application/vnd.japannet-directory-service +http://www.iana.org/assignments/media-types/application/vnd.japannet-jpnstore-wakeup,application/vnd.japannet-jpnstore-wakeup +http://www.iana.org/assignments/media-types/application/vnd.japannet-payment-wakeup,application/vnd.japannet-payment-wakeup +http://www.iana.org/assignments/media-types/application/vnd.japannet-registration,application/vnd.japannet-registration +http://www.iana.org/assignments/media-types/application/vnd.japannet-registration-wakeup,application/vnd.japannet-registration-wakeup +http://www.iana.org/assignments/media-types/application/vnd.japannet-setstore-wakeup,application/vnd.japannet-setstore-wakeup +http://www.iana.org/assignments/media-types/application/vnd.japannet-verification,application/vnd.japannet-verification +http://www.iana.org/assignments/media-types/application/vnd.japannet-verification-wakeup,application/vnd.japannet-verification-wakeup +http://www.iana.org/assignments/media-types/application/vnd.jcp.javame.midlet-rms,application/vnd.jcp.javame.midlet-rms +http://www.iana.org/assignments/media-types/application/vnd.jisp,application/vnd.jisp +http://www.iana.org/assignments/media-types/application/vnd.joost.joda-archive,application/vnd.joost.joda-archive +http://www.iana.org/assignments/media-types/application/vnd.jsk.isdn-ngn,application/vnd.jsk.isdn-ngn +http://www.iana.org/assignments/media-types/application/vnd.kahootz,application/vnd.kahootz +http://www.iana.org/assignments/media-types/application/vnd.kde.karbon,application/vnd.kde.karbon +http://www.iana.org/assignments/media-types/application/vnd.kde.kchart,application/vnd.kde.kchart +http://www.iana.org/assignments/media-types/application/vnd.kde.kformula,application/vnd.kde.kformula +http://www.iana.org/assignments/media-types/application/vnd.kde.kivio,application/vnd.kde.kivio +http://www.iana.org/assignments/media-types/application/vnd.kde.kontour,application/vnd.kde.kontour +http://www.iana.org/assignments/media-types/application/vnd.kde.kpresenter,application/vnd.kde.kpresenter +http://www.iana.org/assignments/media-types/application/vnd.kde.kspread,application/vnd.kde.kspread +http://www.iana.org/assignments/media-types/application/vnd.kde.kword,application/vnd.kde.kword +http://www.iana.org/assignments/media-types/application/vnd.kenameaapp,application/vnd.kenameaapp +http://www.iana.org/assignments/media-types/application/vnd.kidspiration,application/vnd.kidspiration +http://www.iana.org/assignments/media-types/application/vnd.koan,application/vnd.koan +http://www.iana.org/assignments/media-types/application/vnd.kodak-descriptor,application/vnd.kodak-descriptor +http://www.iana.org/assignments/media-types/application/vnd.las,application/vnd.las +http://www.iana.org/assignments/media-types/application/vnd.las.las+json,application/vnd.las.las+json +http://www.iana.org/assignments/media-types/application/vnd.las.las+xml,application/vnd.las.las+xml +http://www.iana.org/assignments/media-types/application/vnd.laszip,application/vnd.laszip +http://www.iana.org/assignments/media-types/application/vnd.ldev.productlicensing,application/vnd.ldev.productlicensing +http://www.iana.org/assignments/media-types/application/vnd.leap+json,application/vnd.leap+json +http://www.iana.org/assignments/media-types/application/vnd.liberty-request+xml,application/vnd.liberty-request+xml +http://www.iana.org/assignments/media-types/application/vnd.llamagraphics.life-balance.desktop,application/vnd.llamagraphics.life-balance.desktop +http://www.iana.org/assignments/media-types/application/vnd.llamagraphics.life-balance.exchange+xml,application/vnd.llamagraphics.life-balance.exchange+xml +http://www.iana.org/assignments/media-types/application/vnd.logipipe.circuit+zip,application/vnd.logipipe.circuit+zip +http://www.iana.org/assignments/media-types/application/vnd.loom,application/vnd.loom +http://www.iana.org/assignments/media-types/application/vnd.lotus-1-2-3,application/vnd.lotus-1-2-3 +http://www.iana.org/assignments/media-types/application/vnd.lotus-approach,application/vnd.lotus-approach +http://www.iana.org/assignments/media-types/application/vnd.lotus-freelance,application/vnd.lotus-freelance +http://www.iana.org/assignments/media-types/application/vnd.lotus-notes,application/vnd.lotus-notes +http://www.iana.org/assignments/media-types/application/vnd.lotus-organizer,application/vnd.lotus-organizer +http://www.iana.org/assignments/media-types/application/vnd.lotus-screencam,application/vnd.lotus-screencam +http://www.iana.org/assignments/media-types/application/vnd.lotus-wordpro,application/vnd.lotus-wordpro +http://www.iana.org/assignments/media-types/application/vnd.macports.portpkg,application/vnd.macports.portpkg +http://www.iana.org/assignments/media-types/application/vnd.mapbox-vector-tile,application/vnd.mapbox-vector-tile +http://www.iana.org/assignments/media-types/application/vnd.marlin.drm.actiontoken+xml,application/vnd.marlin.drm.actiontoken+xml +http://www.iana.org/assignments/media-types/application/vnd.marlin.drm.conftoken+xml,application/vnd.marlin.drm.conftoken+xml +http://www.iana.org/assignments/media-types/application/vnd.marlin.drm.license+xml,application/vnd.marlin.drm.license+xml +http://www.iana.org/assignments/media-types/application/vnd.marlin.drm.mdcf,application/vnd.marlin.drm.mdcf +http://www.iana.org/assignments/media-types/application/vnd.mason+json,application/vnd.mason+json +http://www.iana.org/assignments/media-types/application/vnd.maxar.archive.3tz+zip,application/vnd.maxar.archive.3tz+zip +http://www.iana.org/assignments/media-types/application/vnd.maxmind.maxmind-db,application/vnd.maxmind.maxmind-db +http://www.iana.org/assignments/media-types/application/vnd.mcd,application/vnd.mcd +http://www.iana.org/assignments/media-types/application/vnd.mdl,application/vnd.mdl +http://www.iana.org/assignments/media-types/application/vnd.mdl-mbsdf,application/vnd.mdl-mbsdf +http://www.iana.org/assignments/media-types/application/vnd.medcalcdata,application/vnd.medcalcdata +http://www.iana.org/assignments/media-types/application/vnd.mediastation.cdkey,application/vnd.mediastation.cdkey +http://www.iana.org/assignments/media-types/application/vnd.medicalholodeck.recordxr,application/vnd.medicalholodeck.recordxr +http://www.iana.org/assignments/media-types/application/vnd.meridian-slingshot,application/vnd.meridian-slingshot +http://www.iana.org/assignments/media-types/application/vnd.mermaid,application/vnd.mermaid +http://www.iana.org/assignments/media-types/application/vnd.mfmp,application/vnd.mfmp +http://www.iana.org/assignments/media-types/application/vnd.micro+json,application/vnd.micro+json +http://www.iana.org/assignments/media-types/application/vnd.micrografx.flo,application/vnd.micrografx.flo +http://www.iana.org/assignments/media-types/application/vnd.micrografx.igx,application/vnd.micrografx.igx +http://www.iana.org/assignments/media-types/application/vnd.microsoft.portable-executable,application/vnd.microsoft.portable-executable +http://www.iana.org/assignments/media-types/application/vnd.microsoft.windows.thumbnail-cache,application/vnd.microsoft.windows.thumbnail-cache +http://www.iana.org/assignments/media-types/application/vnd.miele+json,application/vnd.miele+json +http://www.iana.org/assignments/media-types/application/vnd.mif,application/vnd.mif +http://www.iana.org/assignments/media-types/application/vnd.minisoft-hp3000-save,application/vnd.minisoft-hp3000-save +http://www.iana.org/assignments/media-types/application/vnd.mitsubishi.misty-guard.trustweb,application/vnd.mitsubishi.misty-guard.trustweb +http://www.iana.org/assignments/media-types/application/vnd.modl,application/vnd.modl +http://www.iana.org/assignments/media-types/application/vnd.mophun.application,application/vnd.mophun.application +http://www.iana.org/assignments/media-types/application/vnd.mophun.certificate,application/vnd.mophun.certificate +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite,application/vnd.motorola.flexsuite +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite.adsi,application/vnd.motorola.flexsuite.adsi +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite.fis,application/vnd.motorola.flexsuite.fis +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite.gotap,application/vnd.motorola.flexsuite.gotap +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite.kmr,application/vnd.motorola.flexsuite.kmr +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite.ttc,application/vnd.motorola.flexsuite.ttc +http://www.iana.org/assignments/media-types/application/vnd.motorola.flexsuite.wem,application/vnd.motorola.flexsuite.wem +http://www.iana.org/assignments/media-types/application/vnd.motorola.iprm,application/vnd.motorola.iprm +http://www.iana.org/assignments/media-types/application/vnd.mozilla.xul+xml,application/vnd.mozilla.xul+xml +http://www.iana.org/assignments/media-types/application/vnd.ms-3mfdocument,application/vnd.ms-3mfdocument +http://www.iana.org/assignments/media-types/application/vnd.ms-PrintDeviceCapabilities+xml,application/vnd.ms-PrintDeviceCapabilities+xml +http://www.iana.org/assignments/media-types/application/vnd.ms-PrintSchemaTicket+xml,application/vnd.ms-PrintSchemaTicket+xml +http://www.iana.org/assignments/media-types/application/vnd.ms-artgalry,application/vnd.ms-artgalry +http://www.iana.org/assignments/media-types/application/vnd.ms-asf,application/vnd.ms-asf +http://www.iana.org/assignments/media-types/application/vnd.ms-cab-compressed,application/vnd.ms-cab-compressed +http://www.iana.org/assignments/media-types/application/vnd.ms-excel,application/vnd.ms-excel +http://www.iana.org/assignments/media-types/application/vnd.ms-excel.addin.macroEnabled.12,application/vnd.ms-excel.addin.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-excel.sheet.binary.macroEnabled.12,application/vnd.ms-excel.sheet.binary.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-excel.sheet.macroEnabled.12,application/vnd.ms-excel.sheet.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-excel.template.macroEnabled.12,application/vnd.ms-excel.template.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-fontobject,application/vnd.ms-fontobject +http://www.iana.org/assignments/media-types/application/vnd.ms-htmlhelp,application/vnd.ms-htmlhelp +http://www.iana.org/assignments/media-types/application/vnd.ms-ims,application/vnd.ms-ims +http://www.iana.org/assignments/media-types/application/vnd.ms-lrm,application/vnd.ms-lrm +http://www.iana.org/assignments/media-types/application/vnd.ms-office.activeX+xml,application/vnd.ms-office.activeX+xml +http://www.iana.org/assignments/media-types/application/vnd.ms-officetheme,application/vnd.ms-officetheme +http://www.iana.org/assignments/media-types/application/vnd.ms-playready.initiator+xml,application/vnd.ms-playready.initiator+xml +http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint,application/vnd.ms-powerpoint +http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint.addin.macroEnabled.12,application/vnd.ms-powerpoint.addin.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint.presentation.macroEnabled.12,application/vnd.ms-powerpoint.presentation.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint.slide.macroEnabled.12,application/vnd.ms-powerpoint.slide.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint.slideshow.macroEnabled.12,application/vnd.ms-powerpoint.slideshow.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint.template.macroEnabled.12,application/vnd.ms-powerpoint.template.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-project,application/vnd.ms-project +http://www.iana.org/assignments/media-types/application/vnd.ms-tnef,application/vnd.ms-tnef +http://www.iana.org/assignments/media-types/application/vnd.ms-windows.devicepairing,application/vnd.ms-windows.devicepairing +http://www.iana.org/assignments/media-types/application/vnd.ms-windows.nwprinting.oob,application/vnd.ms-windows.nwprinting.oob +http://www.iana.org/assignments/media-types/application/vnd.ms-windows.printerpairing,application/vnd.ms-windows.printerpairing +http://www.iana.org/assignments/media-types/application/vnd.ms-windows.wsd.oob,application/vnd.ms-windows.wsd.oob +http://www.iana.org/assignments/media-types/application/vnd.ms-wmdrm.lic-chlg-req,application/vnd.ms-wmdrm.lic-chlg-req +http://www.iana.org/assignments/media-types/application/vnd.ms-wmdrm.lic-resp,application/vnd.ms-wmdrm.lic-resp +http://www.iana.org/assignments/media-types/application/vnd.ms-wmdrm.meter-chlg-req,application/vnd.ms-wmdrm.meter-chlg-req +http://www.iana.org/assignments/media-types/application/vnd.ms-wmdrm.meter-resp,application/vnd.ms-wmdrm.meter-resp +http://www.iana.org/assignments/media-types/application/vnd.ms-word.document.macroEnabled.12,application/vnd.ms-word.document.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-word.template.macroEnabled.12,application/vnd.ms-word.template.macroEnabled.12 +http://www.iana.org/assignments/media-types/application/vnd.ms-works,application/vnd.ms-works +http://www.iana.org/assignments/media-types/application/vnd.ms-wpl,application/vnd.ms-wpl +http://www.iana.org/assignments/media-types/application/vnd.ms-xpsdocument,application/vnd.ms-xpsdocument +http://www.iana.org/assignments/media-types/application/vnd.msa-disk-image,application/vnd.msa-disk-image +http://www.iana.org/assignments/media-types/application/vnd.mseq,application/vnd.mseq +http://www.iana.org/assignments/media-types/application/vnd.msgpack,application/vnd.msgpack +http://www.iana.org/assignments/media-types/application/vnd.msign,application/vnd.msign +http://www.iana.org/assignments/media-types/application/vnd.multiad.creator,application/vnd.multiad.creator +http://www.iana.org/assignments/media-types/application/vnd.multiad.creator.cif,application/vnd.multiad.creator.cif +http://www.iana.org/assignments/media-types/application/vnd.music-niff,application/vnd.music-niff +http://www.iana.org/assignments/media-types/application/vnd.musician,application/vnd.musician +http://www.iana.org/assignments/media-types/application/vnd.muvee.style,application/vnd.muvee.style +http://www.iana.org/assignments/media-types/application/vnd.mynfc,application/vnd.mynfc +http://www.iana.org/assignments/media-types/application/vnd.nacamar.ybrid+json,application/vnd.nacamar.ybrid+json +http://www.iana.org/assignments/media-types/application/vnd.nato.bindingdataobject+cbor,application/vnd.nato.bindingdataobject+cbor +http://www.iana.org/assignments/media-types/application/vnd.nato.bindingdataobject+json,application/vnd.nato.bindingdataobject+json +http://www.iana.org/assignments/media-types/application/vnd.nato.bindingdataobject+xml,application/vnd.nato.bindingdataobject+xml +http://www.iana.org/assignments/media-types/application/vnd.nato.openxmlformats-package.iepd+zip,application/vnd.nato.openxmlformats-package.iepd+zip +http://www.iana.org/assignments/media-types/application/vnd.ncd.control,application/vnd.ncd.control +http://www.iana.org/assignments/media-types/application/vnd.ncd.reference,application/vnd.ncd.reference +http://www.iana.org/assignments/media-types/application/vnd.nearst.inv+json,application/vnd.nearst.inv+json +http://www.iana.org/assignments/media-types/application/vnd.nebumind.line,application/vnd.nebumind.line +http://www.iana.org/assignments/media-types/application/vnd.nervana,application/vnd.nervana +http://www.iana.org/assignments/media-types/application/vnd.netfpx,application/vnd.netfpx +http://www.iana.org/assignments/media-types/application/vnd.neurolanguage.nlu,application/vnd.neurolanguage.nlu +http://www.iana.org/assignments/media-types/application/vnd.nimn,application/vnd.nimn +http://www.iana.org/assignments/media-types/application/vnd.nintendo.nitro.rom,application/vnd.nintendo.nitro.rom +http://www.iana.org/assignments/media-types/application/vnd.nintendo.snes.rom,application/vnd.nintendo.snes.rom +http://www.iana.org/assignments/media-types/application/vnd.nitf,application/vnd.nitf +http://www.iana.org/assignments/media-types/application/vnd.noblenet-directory,application/vnd.noblenet-directory +http://www.iana.org/assignments/media-types/application/vnd.noblenet-sealer,application/vnd.noblenet-sealer +http://www.iana.org/assignments/media-types/application/vnd.noblenet-web,application/vnd.noblenet-web +http://www.iana.org/assignments/media-types/application/vnd.nokia.catalogs,application/vnd.nokia.catalogs +http://www.iana.org/assignments/media-types/application/vnd.nokia.conml+wbxml,application/vnd.nokia.conml+wbxml +http://www.iana.org/assignments/media-types/application/vnd.nokia.conml+xml,application/vnd.nokia.conml+xml +http://www.iana.org/assignments/media-types/application/vnd.nokia.iSDS-radio-presets,application/vnd.nokia.iSDS-radio-presets +http://www.iana.org/assignments/media-types/application/vnd.nokia.iptv.config+xml,application/vnd.nokia.iptv.config+xml +http://www.iana.org/assignments/media-types/application/vnd.nokia.landmark+wbxml,application/vnd.nokia.landmark+wbxml +http://www.iana.org/assignments/media-types/application/vnd.nokia.landmark+xml,application/vnd.nokia.landmark+xml +http://www.iana.org/assignments/media-types/application/vnd.nokia.landmarkcollection+xml,application/vnd.nokia.landmarkcollection+xml +http://www.iana.org/assignments/media-types/application/vnd.nokia.n-gage.ac+xml,application/vnd.nokia.n-gage.ac+xml +http://www.iana.org/assignments/media-types/application/vnd.nokia.n-gage.data,application/vnd.nokia.n-gage.data +http://www.iana.org/assignments/media-types/application/vnd.nokia.n-gage.symbian.install,application/vnd.nokia.n-gage.symbian.install +http://www.iana.org/assignments/media-types/application/vnd.nokia.ncd,application/vnd.nokia.ncd +http://www.iana.org/assignments/media-types/application/vnd.nokia.pcd+wbxml,application/vnd.nokia.pcd+wbxml +http://www.iana.org/assignments/media-types/application/vnd.nokia.pcd+xml,application/vnd.nokia.pcd+xml +http://www.iana.org/assignments/media-types/application/vnd.nokia.radio-preset,application/vnd.nokia.radio-preset +http://www.iana.org/assignments/media-types/application/vnd.nokia.radio-presets,application/vnd.nokia.radio-presets +http://www.iana.org/assignments/media-types/application/vnd.novadigm.EDM,application/vnd.novadigm.EDM +http://www.iana.org/assignments/media-types/application/vnd.novadigm.EDX,application/vnd.novadigm.EDX +http://www.iana.org/assignments/media-types/application/vnd.novadigm.EXT,application/vnd.novadigm.EXT +http://www.iana.org/assignments/media-types/application/vnd.ntt-local.content-share,application/vnd.ntt-local.content-share +http://www.iana.org/assignments/media-types/application/vnd.ntt-local.file-transfer,application/vnd.ntt-local.file-transfer +http://www.iana.org/assignments/media-types/application/vnd.ntt-local.ogw_remote-access,application/vnd.ntt-local.ogw_remote-access +http://www.iana.org/assignments/media-types/application/vnd.ntt-local.sip-ta_remote,application/vnd.ntt-local.sip-ta_remote +http://www.iana.org/assignments/media-types/application/vnd.ntt-local.sip-ta_tcp_stream,application/vnd.ntt-local.sip-ta_tcp_stream +http://www.iana.org/assignments/media-types/application/vnd.oai.workflows,application/vnd.oai.workflows +http://www.iana.org/assignments/media-types/application/vnd.oai.workflows+json,application/vnd.oai.workflows+json +http://www.iana.org/assignments/media-types/application/vnd.oai.workflows+yaml,application/vnd.oai.workflows+yaml +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.base,application/vnd.oasis.opendocument.base +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.chart,application/vnd.oasis.opendocument.chart +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.chart-template,application/vnd.oasis.opendocument.chart-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.database,application/vnd.oasis.opendocument.database +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.formula,application/vnd.oasis.opendocument.formula +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.formula-template,application/vnd.oasis.opendocument.formula-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.graphics,application/vnd.oasis.opendocument.graphics +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.graphics-template,application/vnd.oasis.opendocument.graphics-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.image,application/vnd.oasis.opendocument.image +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.image-template,application/vnd.oasis.opendocument.image-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.presentation,application/vnd.oasis.opendocument.presentation +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.presentation-template,application/vnd.oasis.opendocument.presentation-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.spreadsheet,application/vnd.oasis.opendocument.spreadsheet +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.spreadsheet-template,application/vnd.oasis.opendocument.spreadsheet-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.text,application/vnd.oasis.opendocument.text +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.text-master,application/vnd.oasis.opendocument.text-master +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.text-master-template,application/vnd.oasis.opendocument.text-master-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.text-template,application/vnd.oasis.opendocument.text-template +http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.text-web,application/vnd.oasis.opendocument.text-web +http://www.iana.org/assignments/media-types/application/vnd.obn,application/vnd.obn +http://www.iana.org/assignments/media-types/application/vnd.ocf+cbor,application/vnd.ocf+cbor +http://www.iana.org/assignments/media-types/application/vnd.oci.image.manifest.v1+json,application/vnd.oci.image.manifest.v1+json +http://www.iana.org/assignments/media-types/application/vnd.oftn.l10n+json,application/vnd.oftn.l10n+json +http://www.iana.org/assignments/media-types/application/vnd.oipf.contentaccessdownload+xml,application/vnd.oipf.contentaccessdownload+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.contentaccessstreaming+xml,application/vnd.oipf.contentaccessstreaming+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.cspg-hexbinary,application/vnd.oipf.cspg-hexbinary +http://www.iana.org/assignments/media-types/application/vnd.oipf.dae.svg+xml,application/vnd.oipf.dae.svg+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.dae.xhtml+xml,application/vnd.oipf.dae.xhtml+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.mippvcontrolmessage+xml,application/vnd.oipf.mippvcontrolmessage+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.pae.gem,application/vnd.oipf.pae.gem +http://www.iana.org/assignments/media-types/application/vnd.oipf.spdiscovery+xml,application/vnd.oipf.spdiscovery+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.spdlist+xml,application/vnd.oipf.spdlist+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.ueprofile+xml,application/vnd.oipf.ueprofile+xml +http://www.iana.org/assignments/media-types/application/vnd.oipf.userprofile+xml,application/vnd.oipf.userprofile+xml +http://www.iana.org/assignments/media-types/application/vnd.olpc-sugar,application/vnd.olpc-sugar +http://www.iana.org/assignments/media-types/application/vnd.oma-scws-config,application/vnd.oma-scws-config +http://www.iana.org/assignments/media-types/application/vnd.oma-scws-http-request,application/vnd.oma-scws-http-request +http://www.iana.org/assignments/media-types/application/vnd.oma-scws-http-response,application/vnd.oma-scws-http-response +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.associated-procedure-parameter+xml,application/vnd.oma.bcast.associated-procedure-parameter+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.drm-trigger+xml,application/vnd.oma.bcast.drm-trigger+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.imd+xml,application/vnd.oma.bcast.imd+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.ltkm,application/vnd.oma.bcast.ltkm +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.notification+xml,application/vnd.oma.bcast.notification+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.provisioningtrigger,application/vnd.oma.bcast.provisioningtrigger +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.sgboot,application/vnd.oma.bcast.sgboot +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.sgdd+xml,application/vnd.oma.bcast.sgdd+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.sgdu,application/vnd.oma.bcast.sgdu +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.simple-symbol-container,application/vnd.oma.bcast.simple-symbol-container +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.smartcard-trigger+xml,application/vnd.oma.bcast.smartcard-trigger+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.sprov+xml,application/vnd.oma.bcast.sprov+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.bcast.stkm,application/vnd.oma.bcast.stkm +http://www.iana.org/assignments/media-types/application/vnd.oma.cab-address-book+xml,application/vnd.oma.cab-address-book+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.cab-feature-handler+xml,application/vnd.oma.cab-feature-handler+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.cab-pcc+xml,application/vnd.oma.cab-pcc+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.cab-subs-invite+xml,application/vnd.oma.cab-subs-invite+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.cab-user-prefs+xml,application/vnd.oma.cab-user-prefs+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.dcd,application/vnd.oma.dcd +http://www.iana.org/assignments/media-types/application/vnd.oma.dcdc,application/vnd.oma.dcdc +http://www.iana.org/assignments/media-types/application/vnd.oma.dd2+xml,application/vnd.oma.dd2+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.drm.risd+xml,application/vnd.oma.drm.risd+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.group-usage-list+xml,application/vnd.oma.group-usage-list+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.lwm2m+cbor,application/vnd.oma.lwm2m+cbor +http://www.iana.org/assignments/media-types/application/vnd.oma.lwm2m+json,application/vnd.oma.lwm2m+json +http://www.iana.org/assignments/media-types/application/vnd.oma.lwm2m+tlv,application/vnd.oma.lwm2m+tlv +http://www.iana.org/assignments/media-types/application/vnd.oma.pal+xml,application/vnd.oma.pal+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.poc.detailed-progress-report+xml,application/vnd.oma.poc.detailed-progress-report+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.poc.final-report+xml,application/vnd.oma.poc.final-report+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.poc.groups+xml,application/vnd.oma.poc.groups+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.poc.invocation-descriptor+xml,application/vnd.oma.poc.invocation-descriptor+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.poc.optimized-progress-report+xml,application/vnd.oma.poc.optimized-progress-report+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.push,application/vnd.oma.push +http://www.iana.org/assignments/media-types/application/vnd.oma.scidm.messages+xml,application/vnd.oma.scidm.messages+xml +http://www.iana.org/assignments/media-types/application/vnd.oma.xcap-directory+xml,application/vnd.oma.xcap-directory+xml +http://www.iana.org/assignments/media-types/application/vnd.omads-email+xml,application/vnd.omads-email+xml +http://www.iana.org/assignments/media-types/application/vnd.omads-file+xml,application/vnd.omads-file+xml +http://www.iana.org/assignments/media-types/application/vnd.omads-folder+xml,application/vnd.omads-folder+xml +http://www.iana.org/assignments/media-types/application/vnd.omaloc-supl-init,application/vnd.omaloc-supl-init +http://www.iana.org/assignments/media-types/application/vnd.onepager,application/vnd.onepager +http://www.iana.org/assignments/media-types/application/vnd.onepagertamp,application/vnd.onepagertamp +http://www.iana.org/assignments/media-types/application/vnd.onepagertamx,application/vnd.onepagertamx +http://www.iana.org/assignments/media-types/application/vnd.onepagertat,application/vnd.onepagertat +http://www.iana.org/assignments/media-types/application/vnd.onepagertatp,application/vnd.onepagertatp +http://www.iana.org/assignments/media-types/application/vnd.onepagertatx,application/vnd.onepagertatx +http://www.iana.org/assignments/media-types/application/vnd.onvif.metadata,application/vnd.onvif.metadata +http://www.iana.org/assignments/media-types/application/vnd.openblox.game+xml,application/vnd.openblox.game+xml +http://www.iana.org/assignments/media-types/application/vnd.openblox.game-binary,application/vnd.openblox.game-binary +http://www.iana.org/assignments/media-types/application/vnd.openeye.oeb,application/vnd.openeye.oeb +http://www.iana.org/assignments/media-types/application/vnd.openstreetmap.data+xml,application/vnd.openstreetmap.data+xml +http://www.iana.org/assignments/media-types/application/vnd.opentimestamps.ots,application/vnd.opentimestamps.ots +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.custom-properties+xml,application/vnd.openxmlformats-officedocument.custom-properties+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.customXmlProperties+xml,application/vnd.openxmlformats-officedocument.customXmlProperties+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawing+xml,application/vnd.openxmlformats-officedocument.drawing+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawingml.chart+xml,application/vnd.openxmlformats-officedocument.drawingml.chart+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml,application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml,application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml,application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml,application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml,application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.extended-properties+xml,application/vnd.openxmlformats-officedocument.extended-properties+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml,application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.comments+xml,application/vnd.openxmlformats-officedocument.presentationml.comments+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml,application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml,application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml,application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.presProps+xml,application/vnd.openxmlformats-officedocument.presentationml.presProps+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.openxmlformats-officedocument.presentationml.presentation +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml,application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slide,application/vnd.openxmlformats-officedocument.presentationml.slide +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slide+xml,application/vnd.openxmlformats-officedocument.presentationml.slide+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml,application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml,application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml,application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slideshow,application/vnd.openxmlformats-officedocument.presentationml.slideshow +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml,application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml,application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.tags+xml,application/vnd.openxmlformats-officedocument.presentationml.tags+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.template,application/vnd.openxmlformats-officedocument.presentationml.template +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.template.main+xml,application/vnd.openxmlformats-officedocument.presentationml.template.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml,application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.template,application/vnd.openxmlformats-officedocument.spreadsheetml.template +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml,application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.theme+xml,application/vnd.openxmlformats-officedocument.theme+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.themeOverride+xml,application/vnd.openxmlformats-officedocument.themeOverride+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.vmlDrawing,application/vnd.openxmlformats-officedocument.vmlDrawing +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.wordprocessingml.document +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.template,application/vnd.openxmlformats-officedocument.wordprocessingml.template +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml,application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-package.core-properties+xml,application/vnd.openxmlformats-package.core-properties+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml,application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml +http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-package.relationships+xml,application/vnd.openxmlformats-package.relationships+xml +http://www.iana.org/assignments/media-types/application/vnd.oracle.resource+json,application/vnd.oracle.resource+json +http://www.iana.org/assignments/media-types/application/vnd.orange.indata,application/vnd.orange.indata +http://www.iana.org/assignments/media-types/application/vnd.osa.netdeploy,application/vnd.osa.netdeploy +http://www.iana.org/assignments/media-types/application/vnd.osgeo.mapguide.package,application/vnd.osgeo.mapguide.package +http://www.iana.org/assignments/media-types/application/vnd.osgi.bundle,application/vnd.osgi.bundle +http://www.iana.org/assignments/media-types/application/vnd.osgi.dp,application/vnd.osgi.dp +http://www.iana.org/assignments/media-types/application/vnd.osgi.subsystem,application/vnd.osgi.subsystem +http://www.iana.org/assignments/media-types/application/vnd.otps.ct-kip+xml,application/vnd.otps.ct-kip+xml +http://www.iana.org/assignments/media-types/application/vnd.oxli.countgraph,application/vnd.oxli.countgraph +http://www.iana.org/assignments/media-types/application/vnd.pagerduty+json,application/vnd.pagerduty+json +http://www.iana.org/assignments/media-types/application/vnd.palm,application/vnd.palm +http://www.iana.org/assignments/media-types/application/vnd.panoply,application/vnd.panoply +http://www.iana.org/assignments/media-types/application/vnd.paos.xml,application/vnd.paos.xml +http://www.iana.org/assignments/media-types/application/vnd.patentdive,application/vnd.patentdive +http://www.iana.org/assignments/media-types/application/vnd.patientecommsdoc,application/vnd.patientecommsdoc +http://www.iana.org/assignments/media-types/application/vnd.pawaafile,application/vnd.pawaafile +http://www.iana.org/assignments/media-types/application/vnd.pcos,application/vnd.pcos +http://www.iana.org/assignments/media-types/application/vnd.pg.format,application/vnd.pg.format +http://www.iana.org/assignments/media-types/application/vnd.pg.osasli,application/vnd.pg.osasli +http://www.iana.org/assignments/media-types/application/vnd.piaccess.application-licence,application/vnd.piaccess.application-licence +http://www.iana.org/assignments/media-types/application/vnd.picsel,application/vnd.picsel +http://www.iana.org/assignments/media-types/application/vnd.pmi.widget,application/vnd.pmi.widget +http://www.iana.org/assignments/media-types/application/vnd.poc.group-advertisement+xml,application/vnd.poc.group-advertisement+xml +http://www.iana.org/assignments/media-types/application/vnd.pocketlearn,application/vnd.pocketlearn +http://www.iana.org/assignments/media-types/application/vnd.powerbuilder6,application/vnd.powerbuilder6 +http://www.iana.org/assignments/media-types/application/vnd.powerbuilder6-s,application/vnd.powerbuilder6-s +http://www.iana.org/assignments/media-types/application/vnd.powerbuilder7,application/vnd.powerbuilder7 +http://www.iana.org/assignments/media-types/application/vnd.powerbuilder7-s,application/vnd.powerbuilder7-s +http://www.iana.org/assignments/media-types/application/vnd.powerbuilder75,application/vnd.powerbuilder75 +http://www.iana.org/assignments/media-types/application/vnd.powerbuilder75-s,application/vnd.powerbuilder75-s +http://www.iana.org/assignments/media-types/application/vnd.preminet,application/vnd.preminet +http://www.iana.org/assignments/media-types/application/vnd.previewsystems.box,application/vnd.previewsystems.box +http://www.iana.org/assignments/media-types/application/vnd.proteus.magazine,application/vnd.proteus.magazine +http://www.iana.org/assignments/media-types/application/vnd.psfs,application/vnd.psfs +http://www.iana.org/assignments/media-types/application/vnd.pt.mundusmundi,application/vnd.pt.mundusmundi +http://www.iana.org/assignments/media-types/application/vnd.publishare-delta-tree,application/vnd.publishare-delta-tree +http://www.iana.org/assignments/media-types/application/vnd.pvi.ptid1,application/vnd.pvi.ptid1 +http://www.iana.org/assignments/media-types/application/vnd.pwg-multiplexed,application/vnd.pwg-multiplexed +http://www.iana.org/assignments/media-types/application/vnd.pwg-xhtml-print+xml,application/vnd.pwg-xhtml-print+xml +http://www.iana.org/assignments/media-types/application/vnd.qualcomm.brew-app-res,application/vnd.qualcomm.brew-app-res +http://www.iana.org/assignments/media-types/application/vnd.quarantainenet,application/vnd.quarantainenet +http://www.iana.org/assignments/media-types/application/vnd.quobject-quoxdocument,application/vnd.quobject-quoxdocument +http://www.iana.org/assignments/media-types/application/vnd.radisys.moml+xml,application/vnd.radisys.moml+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml+xml,application/vnd.radisys.msml+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-audit+xml,application/vnd.radisys.msml-audit+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-audit-conf+xml,application/vnd.radisys.msml-audit-conf+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-audit-conn+xml,application/vnd.radisys.msml-audit-conn+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-audit-dialog+xml,application/vnd.radisys.msml-audit-dialog+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-audit-stream+xml,application/vnd.radisys.msml-audit-stream+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-conf+xml,application/vnd.radisys.msml-conf+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog+xml,application/vnd.radisys.msml-dialog+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog-base+xml,application/vnd.radisys.msml-dialog-base+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog-fax-detect+xml,application/vnd.radisys.msml-dialog-fax-detect+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog-fax-sendrecv+xml,application/vnd.radisys.msml-dialog-fax-sendrecv+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog-group+xml,application/vnd.radisys.msml-dialog-group+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog-speech+xml,application/vnd.radisys.msml-dialog-speech+xml +http://www.iana.org/assignments/media-types/application/vnd.radisys.msml-dialog-transform+xml,application/vnd.radisys.msml-dialog-transform+xml +http://www.iana.org/assignments/media-types/application/vnd.rainstor.data,application/vnd.rainstor.data +http://www.iana.org/assignments/media-types/application/vnd.rapid,application/vnd.rapid +http://www.iana.org/assignments/media-types/application/vnd.rar,application/vnd.rar +http://www.iana.org/assignments/media-types/application/vnd.realvnc.bed,application/vnd.realvnc.bed +http://www.iana.org/assignments/media-types/application/vnd.recordare.musicxml,application/vnd.recordare.musicxml +http://www.iana.org/assignments/media-types/application/vnd.recordare.musicxml+xml,application/vnd.recordare.musicxml+xml +http://www.iana.org/assignments/media-types/application/vnd.relpipe,application/vnd.relpipe +http://www.iana.org/assignments/media-types/application/vnd.resilient.logic,application/vnd.resilient.logic +http://www.iana.org/assignments/media-types/application/vnd.restful+json,application/vnd.restful+json +http://www.iana.org/assignments/media-types/application/vnd.rig.cryptonote,application/vnd.rig.cryptonote +http://www.iana.org/assignments/media-types/application/vnd.route66.link66+xml,application/vnd.route66.link66+xml +http://www.iana.org/assignments/media-types/application/vnd.rs-274x,application/vnd.rs-274x +http://www.iana.org/assignments/media-types/application/vnd.ruckus.download,application/vnd.ruckus.download +http://www.iana.org/assignments/media-types/application/vnd.s3sms,application/vnd.s3sms +http://www.iana.org/assignments/media-types/application/vnd.sailingtracker.track,application/vnd.sailingtracker.track +http://www.iana.org/assignments/media-types/application/vnd.sar,application/vnd.sar +http://www.iana.org/assignments/media-types/application/vnd.sbm.cid,application/vnd.sbm.cid +http://www.iana.org/assignments/media-types/application/vnd.sbm.mid2,application/vnd.sbm.mid2 +http://www.iana.org/assignments/media-types/application/vnd.scribus,application/vnd.scribus +http://www.iana.org/assignments/media-types/application/vnd.sealed.3df,application/vnd.sealed.3df +http://www.iana.org/assignments/media-types/application/vnd.sealed.csf,application/vnd.sealed.csf +http://www.iana.org/assignments/media-types/application/vnd.sealed.doc,application/vnd.sealed.doc +http://www.iana.org/assignments/media-types/application/vnd.sealed.eml,application/vnd.sealed.eml +http://www.iana.org/assignments/media-types/application/vnd.sealed.mht,application/vnd.sealed.mht +http://www.iana.org/assignments/media-types/application/vnd.sealed.net,application/vnd.sealed.net +http://www.iana.org/assignments/media-types/application/vnd.sealed.ppt,application/vnd.sealed.ppt +http://www.iana.org/assignments/media-types/application/vnd.sealed.tiff,application/vnd.sealed.tiff +http://www.iana.org/assignments/media-types/application/vnd.sealed.xls,application/vnd.sealed.xls +http://www.iana.org/assignments/media-types/application/vnd.sealedmedia.softseal.html,application/vnd.sealedmedia.softseal.html +http://www.iana.org/assignments/media-types/application/vnd.sealedmedia.softseal.pdf,application/vnd.sealedmedia.softseal.pdf +http://www.iana.org/assignments/media-types/application/vnd.seemail,application/vnd.seemail +http://www.iana.org/assignments/media-types/application/vnd.seis+json,application/vnd.seis+json +http://www.iana.org/assignments/media-types/application/vnd.sema,application/vnd.sema +http://www.iana.org/assignments/media-types/application/vnd.semd,application/vnd.semd +http://www.iana.org/assignments/media-types/application/vnd.semf,application/vnd.semf +http://www.iana.org/assignments/media-types/application/vnd.shade-save-file,application/vnd.shade-save-file +http://www.iana.org/assignments/media-types/application/vnd.shana.informed.formdata,application/vnd.shana.informed.formdata +http://www.iana.org/assignments/media-types/application/vnd.shana.informed.formtemplate,application/vnd.shana.informed.formtemplate +http://www.iana.org/assignments/media-types/application/vnd.shana.informed.interchange,application/vnd.shana.informed.interchange +http://www.iana.org/assignments/media-types/application/vnd.shana.informed.package,application/vnd.shana.informed.package +http://www.iana.org/assignments/media-types/application/vnd.shootproof+json,application/vnd.shootproof+json +http://www.iana.org/assignments/media-types/application/vnd.shopkick+json,application/vnd.shopkick+json +http://www.iana.org/assignments/media-types/application/vnd.shp,application/vnd.shp +http://www.iana.org/assignments/media-types/application/vnd.shx,application/vnd.shx +http://www.iana.org/assignments/media-types/application/vnd.sigrok.session,application/vnd.sigrok.session +http://www.iana.org/assignments/media-types/application/vnd.siren+json,application/vnd.siren+json +http://www.iana.org/assignments/media-types/application/vnd.smaf,application/vnd.smaf +http://www.iana.org/assignments/media-types/application/vnd.smart.notebook,application/vnd.smart.notebook +http://www.iana.org/assignments/media-types/application/vnd.smart.teacher,application/vnd.smart.teacher +http://www.iana.org/assignments/media-types/application/vnd.smintio.portals.archive,application/vnd.smintio.portals.archive +http://www.iana.org/assignments/media-types/application/vnd.snesdev-page-table,application/vnd.snesdev-page-table +http://www.iana.org/assignments/media-types/application/vnd.software602.filler.form+xml,application/vnd.software602.filler.form+xml +http://www.iana.org/assignments/media-types/application/vnd.software602.filler.form-xml-zip,application/vnd.software602.filler.form-xml-zip +http://www.iana.org/assignments/media-types/application/vnd.solent.sdkm+xml,application/vnd.solent.sdkm+xml +http://www.iana.org/assignments/media-types/application/vnd.spotfire.dxp,application/vnd.spotfire.dxp +http://www.iana.org/assignments/media-types/application/vnd.spotfire.sfs,application/vnd.spotfire.sfs +http://www.iana.org/assignments/media-types/application/vnd.sqlite3,application/vnd.sqlite3 +http://www.iana.org/assignments/media-types/application/vnd.sss-cod,application/vnd.sss-cod +http://www.iana.org/assignments/media-types/application/vnd.sss-dtf,application/vnd.sss-dtf +http://www.iana.org/assignments/media-types/application/vnd.sss-ntf,application/vnd.sss-ntf +http://www.iana.org/assignments/media-types/application/vnd.stepmania.package,application/vnd.stepmania.package +http://www.iana.org/assignments/media-types/application/vnd.stepmania.stepchart,application/vnd.stepmania.stepchart +http://www.iana.org/assignments/media-types/application/vnd.street-stream,application/vnd.street-stream +http://www.iana.org/assignments/media-types/application/vnd.sun.wadl+xml,application/vnd.sun.wadl+xml +http://www.iana.org/assignments/media-types/application/vnd.sus-calendar,application/vnd.sus-calendar +http://www.iana.org/assignments/media-types/application/vnd.svd,application/vnd.svd +http://www.iana.org/assignments/media-types/application/vnd.swiftview-ics,application/vnd.swiftview-ics +http://www.iana.org/assignments/media-types/application/vnd.sybyl.mol2,application/vnd.sybyl.mol2 +http://www.iana.org/assignments/media-types/application/vnd.sycle+xml,application/vnd.sycle+xml +http://www.iana.org/assignments/media-types/application/vnd.syft+json,application/vnd.syft+json +http://www.iana.org/assignments/media-types/application/vnd.syncml+xml,application/vnd.syncml+xml +http://www.iana.org/assignments/media-types/application/vnd.syncml.dm+wbxml,application/vnd.syncml.dm+wbxml +http://www.iana.org/assignments/media-types/application/vnd.syncml.dm+xml,application/vnd.syncml.dm+xml +http://www.iana.org/assignments/media-types/application/vnd.syncml.dm.notification,application/vnd.syncml.dm.notification +http://www.iana.org/assignments/media-types/application/vnd.syncml.dmddf+wbxml,application/vnd.syncml.dmddf+wbxml +http://www.iana.org/assignments/media-types/application/vnd.syncml.dmddf+xml,application/vnd.syncml.dmddf+xml +http://www.iana.org/assignments/media-types/application/vnd.syncml.dmtnds+wbxml,application/vnd.syncml.dmtnds+wbxml +http://www.iana.org/assignments/media-types/application/vnd.syncml.dmtnds+xml,application/vnd.syncml.dmtnds+xml +http://www.iana.org/assignments/media-types/application/vnd.syncml.ds.notification,application/vnd.syncml.ds.notification +http://www.iana.org/assignments/media-types/application/vnd.tableschema+json,application/vnd.tableschema+json +http://www.iana.org/assignments/media-types/application/vnd.tao.intent-module-archive,application/vnd.tao.intent-module-archive +http://www.iana.org/assignments/media-types/application/vnd.tcpdump.pcap,application/vnd.tcpdump.pcap +http://www.iana.org/assignments/media-types/application/vnd.think-cell.ppttc+json,application/vnd.think-cell.ppttc+json +http://www.iana.org/assignments/media-types/application/vnd.tmd.mediaflex.api+xml,application/vnd.tmd.mediaflex.api+xml +http://www.iana.org/assignments/media-types/application/vnd.tml,application/vnd.tml +http://www.iana.org/assignments/media-types/application/vnd.tmobile-livetv,application/vnd.tmobile-livetv +http://www.iana.org/assignments/media-types/application/vnd.tri.onesource,application/vnd.tri.onesource +http://www.iana.org/assignments/media-types/application/vnd.trid.tpt,application/vnd.trid.tpt +http://www.iana.org/assignments/media-types/application/vnd.triscape.mxs,application/vnd.triscape.mxs +http://www.iana.org/assignments/media-types/application/vnd.trueapp,application/vnd.trueapp +http://www.iana.org/assignments/media-types/application/vnd.truedoc,application/vnd.truedoc +http://www.iana.org/assignments/media-types/application/vnd.ubisoft.webplayer,application/vnd.ubisoft.webplayer +http://www.iana.org/assignments/media-types/application/vnd.ufdl,application/vnd.ufdl +http://www.iana.org/assignments/media-types/application/vnd.uiq.theme,application/vnd.uiq.theme +http://www.iana.org/assignments/media-types/application/vnd.umajin,application/vnd.umajin +http://www.iana.org/assignments/media-types/application/vnd.unity,application/vnd.unity +http://www.iana.org/assignments/media-types/application/vnd.uoml+xml,application/vnd.uoml+xml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.alert,application/vnd.uplanet.alert +http://www.iana.org/assignments/media-types/application/vnd.uplanet.alert-wbxml,application/vnd.uplanet.alert-wbxml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.bearer-choice,application/vnd.uplanet.bearer-choice +http://www.iana.org/assignments/media-types/application/vnd.uplanet.bearer-choice-wbxml,application/vnd.uplanet.bearer-choice-wbxml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.cacheop,application/vnd.uplanet.cacheop +http://www.iana.org/assignments/media-types/application/vnd.uplanet.cacheop-wbxml,application/vnd.uplanet.cacheop-wbxml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.channel,application/vnd.uplanet.channel +http://www.iana.org/assignments/media-types/application/vnd.uplanet.channel-wbxml,application/vnd.uplanet.channel-wbxml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.list,application/vnd.uplanet.list +http://www.iana.org/assignments/media-types/application/vnd.uplanet.list-wbxml,application/vnd.uplanet.list-wbxml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.listcmd,application/vnd.uplanet.listcmd +http://www.iana.org/assignments/media-types/application/vnd.uplanet.listcmd-wbxml,application/vnd.uplanet.listcmd-wbxml +http://www.iana.org/assignments/media-types/application/vnd.uplanet.signal,application/vnd.uplanet.signal +http://www.iana.org/assignments/media-types/application/vnd.uri-map,application/vnd.uri-map +http://www.iana.org/assignments/media-types/application/vnd.valve.source.material,application/vnd.valve.source.material +http://www.iana.org/assignments/media-types/application/vnd.vcx,application/vnd.vcx +http://www.iana.org/assignments/media-types/application/vnd.vd-study,application/vnd.vd-study +http://www.iana.org/assignments/media-types/application/vnd.vectorworks,application/vnd.vectorworks +http://www.iana.org/assignments/media-types/application/vnd.vel+json,application/vnd.vel+json +http://www.iana.org/assignments/media-types/application/vnd.verimatrix.vcas,application/vnd.verimatrix.vcas +http://www.iana.org/assignments/media-types/application/vnd.veritone.aion+json,application/vnd.veritone.aion+json +http://www.iana.org/assignments/media-types/application/vnd.veryant.thin,application/vnd.veryant.thin +http://www.iana.org/assignments/media-types/application/vnd.ves.encrypted,application/vnd.ves.encrypted +http://www.iana.org/assignments/media-types/application/vnd.vidsoft.vidconference,application/vnd.vidsoft.vidconference +http://www.iana.org/assignments/media-types/application/vnd.visio,application/vnd.visio +http://www.iana.org/assignments/media-types/application/vnd.visionary,application/vnd.visionary +http://www.iana.org/assignments/media-types/application/vnd.vividence.scriptfile,application/vnd.vividence.scriptfile +http://www.iana.org/assignments/media-types/application/vnd.vsf,application/vnd.vsf +http://www.iana.org/assignments/media-types/application/vnd.wap.sic,application/vnd.wap.sic +http://www.iana.org/assignments/media-types/application/vnd.wap.slc,application/vnd.wap.slc +http://www.iana.org/assignments/media-types/application/vnd.wap.wbxml,application/vnd.wap.wbxml +http://www.iana.org/assignments/media-types/application/vnd.wap.wmlc,application/vnd.wap.wmlc +http://www.iana.org/assignments/media-types/application/vnd.wap.wmlscriptc,application/vnd.wap.wmlscriptc +http://www.iana.org/assignments/media-types/application/vnd.wasmflow.wafl,application/vnd.wasmflow.wafl +http://www.iana.org/assignments/media-types/application/vnd.webturbo,application/vnd.webturbo +http://www.iana.org/assignments/media-types/application/vnd.wfa.dpp,application/vnd.wfa.dpp +http://www.iana.org/assignments/media-types/application/vnd.wfa.p2p,application/vnd.wfa.p2p +http://www.iana.org/assignments/media-types/application/vnd.wfa.wsc,application/vnd.wfa.wsc +http://www.iana.org/assignments/media-types/application/vnd.windows.devicepairing,application/vnd.windows.devicepairing +http://www.iana.org/assignments/media-types/application/vnd.wmc,application/vnd.wmc +http://www.iana.org/assignments/media-types/application/vnd.wmf.bootstrap,application/vnd.wmf.bootstrap +http://www.iana.org/assignments/media-types/application/vnd.wolfram.mathematica,application/vnd.wolfram.mathematica +http://www.iana.org/assignments/media-types/application/vnd.wolfram.mathematica.package,application/vnd.wolfram.mathematica.package +http://www.iana.org/assignments/media-types/application/vnd.wolfram.player,application/vnd.wolfram.player +http://www.iana.org/assignments/media-types/application/vnd.wordlift,application/vnd.wordlift +http://www.iana.org/assignments/media-types/application/vnd.wordperfect,application/vnd.wordperfect +http://www.iana.org/assignments/media-types/application/vnd.wqd,application/vnd.wqd +http://www.iana.org/assignments/media-types/application/vnd.wrq-hp3000-labelled,application/vnd.wrq-hp3000-labelled +http://www.iana.org/assignments/media-types/application/vnd.wt.stf,application/vnd.wt.stf +http://www.iana.org/assignments/media-types/application/vnd.wv.csp+wbxml,application/vnd.wv.csp+wbxml +http://www.iana.org/assignments/media-types/application/vnd.wv.csp+xml,application/vnd.wv.csp+xml +http://www.iana.org/assignments/media-types/application/vnd.wv.ssp+xml,application/vnd.wv.ssp+xml +http://www.iana.org/assignments/media-types/application/vnd.xacml+json,application/vnd.xacml+json +http://www.iana.org/assignments/media-types/application/vnd.xara,application/vnd.xara +http://www.iana.org/assignments/media-types/application/vnd.xecrets-encrypted,application/vnd.xecrets-encrypted +http://www.iana.org/assignments/media-types/application/vnd.xfdl,application/vnd.xfdl +http://www.iana.org/assignments/media-types/application/vnd.xfdl.webform,application/vnd.xfdl.webform +http://www.iana.org/assignments/media-types/application/vnd.xmi+xml,application/vnd.xmi+xml +http://www.iana.org/assignments/media-types/application/vnd.xmpie.cpkg,application/vnd.xmpie.cpkg +http://www.iana.org/assignments/media-types/application/vnd.xmpie.dpkg,application/vnd.xmpie.dpkg +http://www.iana.org/assignments/media-types/application/vnd.xmpie.plan,application/vnd.xmpie.plan +http://www.iana.org/assignments/media-types/application/vnd.xmpie.ppkg,application/vnd.xmpie.ppkg +http://www.iana.org/assignments/media-types/application/vnd.xmpie.xlim,application/vnd.xmpie.xlim +http://www.iana.org/assignments/media-types/application/vnd.yamaha.hv-dic,application/vnd.yamaha.hv-dic +http://www.iana.org/assignments/media-types/application/vnd.yamaha.hv-script,application/vnd.yamaha.hv-script +http://www.iana.org/assignments/media-types/application/vnd.yamaha.hv-voice,application/vnd.yamaha.hv-voice +http://www.iana.org/assignments/media-types/application/vnd.yamaha.openscoreformat,application/vnd.yamaha.openscoreformat +http://www.iana.org/assignments/media-types/application/vnd.yamaha.openscoreformat.osfpvg+xml,application/vnd.yamaha.openscoreformat.osfpvg+xml +http://www.iana.org/assignments/media-types/application/vnd.yamaha.remote-setup,application/vnd.yamaha.remote-setup +http://www.iana.org/assignments/media-types/application/vnd.yamaha.smaf-audio,application/vnd.yamaha.smaf-audio +http://www.iana.org/assignments/media-types/application/vnd.yamaha.smaf-phrase,application/vnd.yamaha.smaf-phrase +http://www.iana.org/assignments/media-types/application/vnd.yamaha.through-ngn,application/vnd.yamaha.through-ngn +http://www.iana.org/assignments/media-types/application/vnd.yamaha.tunnel-udpencap,application/vnd.yamaha.tunnel-udpencap +http://www.iana.org/assignments/media-types/application/vnd.yaoweme,application/vnd.yaoweme +http://www.iana.org/assignments/media-types/application/vnd.yellowriver-custom-menu,application/vnd.yellowriver-custom-menu +http://www.iana.org/assignments/media-types/application/vnd.youtube.yt,application/vnd.youtube.yt +http://www.iana.org/assignments/media-types/application/vnd.zul,application/vnd.zul +http://www.iana.org/assignments/media-types/application/vnd.zzazz.deck+xml,application/vnd.zzazz.deck+xml +http://www.iana.org/assignments/media-types/application/voicexml+xml,application/voicexml+xml +http://www.iana.org/assignments/media-types/application/voucher-cms+json,application/voucher-cms+json +http://www.iana.org/assignments/media-types/application/vp,application/vp +http://www.iana.org/assignments/media-types/application/vq-rtcpxr,application/vq-rtcpxr +http://www.iana.org/assignments/media-types/application/wasm,application/wasm +http://www.iana.org/assignments/media-types/application/watcherinfo+xml,application/watcherinfo+xml +http://www.iana.org/assignments/media-types/application/webpush-options+json,application/webpush-options+json +http://www.iana.org/assignments/media-types/application/whoispp-query,application/whoispp-query +http://www.iana.org/assignments/media-types/application/whoispp-response,application/whoispp-response +http://www.iana.org/assignments/media-types/application/widget,application/widget +http://www.iana.org/assignments/media-types/application/wita,application/wita +http://www.iana.org/assignments/media-types/application/wordperfect5.1,application/wordperfect5.1 +http://www.iana.org/assignments/media-types/application/wsdl+xml,application/wsdl+xml +http://www.iana.org/assignments/media-types/application/wspolicy+xml,application/wspolicy+xml +http://www.iana.org/assignments/media-types/application/x-pki-message,application/x-pki-message +http://www.iana.org/assignments/media-types/application/x-www-form-urlencoded,application/x-www-form-urlencoded +http://www.iana.org/assignments/media-types/application/x-x509-ca-cert,application/x-x509-ca-cert +http://www.iana.org/assignments/media-types/application/x-x509-ca-ra-cert,application/x-x509-ca-ra-cert +http://www.iana.org/assignments/media-types/application/x-x509-next-ca-cert,application/x-x509-next-ca-cert +http://www.iana.org/assignments/media-types/application/x400-bp,application/x400-bp +http://www.iana.org/assignments/media-types/application/xacml+xml,application/xacml+xml +http://www.iana.org/assignments/media-types/application/xcap-att+xml,application/xcap-att+xml +http://www.iana.org/assignments/media-types/application/xcap-caps+xml,application/xcap-caps+xml +http://www.iana.org/assignments/media-types/application/xcap-diff+xml,application/xcap-diff+xml +http://www.iana.org/assignments/media-types/application/xcap-el+xml,application/xcap-el+xml +http://www.iana.org/assignments/media-types/application/xcap-error+xml,application/xcap-error+xml +http://www.iana.org/assignments/media-types/application/xcap-ns+xml,application/xcap-ns+xml +http://www.iana.org/assignments/media-types/application/xcon-conference-info+xml,application/xcon-conference-info+xml +http://www.iana.org/assignments/media-types/application/xcon-conference-info-diff+xml,application/xcon-conference-info-diff+xml +http://www.iana.org/assignments/media-types/application/xenc+xml,application/xenc+xml +http://www.iana.org/assignments/media-types/application/xfdf,application/xfdf +http://www.iana.org/assignments/media-types/application/xhtml+xml,application/xhtml+xml +http://www.iana.org/assignments/media-types/application/xliff+xml,application/xliff+xml +http://www.iana.org/assignments/media-types/application/xml,application/xml +http://www.iana.org/assignments/media-types/application/xml-dtd,application/xml-dtd +http://www.iana.org/assignments/media-types/application/xml-external-parsed-entity,application/xml-external-parsed-entity +http://www.iana.org/assignments/media-types/application/xml-patch+xml,application/xml-patch+xml +http://www.iana.org/assignments/media-types/application/xmpp+xml,application/xmpp+xml +http://www.iana.org/assignments/media-types/application/xop+xml,application/xop+xml +http://www.iana.org/assignments/media-types/application/xslt+xml,application/xslt+xml +http://www.iana.org/assignments/media-types/application/xv+xml,application/xv+xml +http://www.iana.org/assignments/media-types/application/yaml,application/yaml +http://www.iana.org/assignments/media-types/application/yang,application/yang +http://www.iana.org/assignments/media-types/application/yang-data+cbor,application/yang-data+cbor +http://www.iana.org/assignments/media-types/application/yang-data+json,application/yang-data+json +http://www.iana.org/assignments/media-types/application/yang-data+xml,application/yang-data+xml +http://www.iana.org/assignments/media-types/application/yang-patch+json,application/yang-patch+json +http://www.iana.org/assignments/media-types/application/yang-patch+xml,application/yang-patch+xml +http://www.iana.org/assignments/media-types/application/yang-sid+json,application/yang-sid+json +http://www.iana.org/assignments/media-types/application/yin+xml,application/yin+xml +http://www.iana.org/assignments/media-types/application/zip,application/zip +http://www.iana.org/assignments/media-types/application/zlib,application/zlib +http://www.iana.org/assignments/media-types/application/zstd,application/zstd +http://www.iana.org/assignments/media-types/audio/1d-interleaved-parityfec,audio/1d-interleaved-parityfec +http://www.iana.org/assignments/media-types/audio/32kadpcm,audio/32kadpcm +http://www.iana.org/assignments/media-types/audio/3gpp,audio/3gpp +http://www.iana.org/assignments/media-types/audio/3gpp2,audio/3gpp2 +http://www.iana.org/assignments/media-types/audio/AMR,audio/AMR +http://www.iana.org/assignments/media-types/audio/AMR-WB,audio/AMR-WB +http://www.iana.org/assignments/media-types/audio/ATRAC-ADVANCED-LOSSLESS,audio/ATRAC-ADVANCED-LOSSLESS +http://www.iana.org/assignments/media-types/audio/ATRAC-X,audio/ATRAC-X +http://www.iana.org/assignments/media-types/audio/ATRAC3,audio/ATRAC3 +http://www.iana.org/assignments/media-types/audio/BV16,audio/BV16 +http://www.iana.org/assignments/media-types/audio/BV32,audio/BV32 +http://www.iana.org/assignments/media-types/audio/CN,audio/CN +http://www.iana.org/assignments/media-types/audio/DAT12,audio/DAT12 +http://www.iana.org/assignments/media-types/audio/DV,audio/DV +http://www.iana.org/assignments/media-types/audio/DVI4,audio/DVI4 +http://www.iana.org/assignments/media-types/audio/EVRC,audio/EVRC +http://www.iana.org/assignments/media-types/audio/EVRC-QCP,audio/EVRC-QCP +http://www.iana.org/assignments/media-types/audio/EVRC0,audio/EVRC0 +http://www.iana.org/assignments/media-types/audio/EVRC1,audio/EVRC1 +http://www.iana.org/assignments/media-types/audio/EVRCB,audio/EVRCB +http://www.iana.org/assignments/media-types/audio/EVRCB0,audio/EVRCB0 +http://www.iana.org/assignments/media-types/audio/EVRCB1,audio/EVRCB1 +http://www.iana.org/assignments/media-types/audio/EVRCNW,audio/EVRCNW +http://www.iana.org/assignments/media-types/audio/EVRCNW0,audio/EVRCNW0 +http://www.iana.org/assignments/media-types/audio/EVRCNW1,audio/EVRCNW1 +http://www.iana.org/assignments/media-types/audio/EVRCWB,audio/EVRCWB +http://www.iana.org/assignments/media-types/audio/EVRCWB0,audio/EVRCWB0 +http://www.iana.org/assignments/media-types/audio/EVRCWB1,audio/EVRCWB1 +http://www.iana.org/assignments/media-types/audio/EVS,audio/EVS +http://www.iana.org/assignments/media-types/audio/G711-0,audio/G711-0 +http://www.iana.org/assignments/media-types/audio/G719,audio/G719 +http://www.iana.org/assignments/media-types/audio/G722,audio/G722 +http://www.iana.org/assignments/media-types/audio/G7221,audio/G7221 +http://www.iana.org/assignments/media-types/audio/G723,audio/G723 +http://www.iana.org/assignments/media-types/audio/G726-16,audio/G726-16 +http://www.iana.org/assignments/media-types/audio/G726-24,audio/G726-24 +http://www.iana.org/assignments/media-types/audio/G726-32,audio/G726-32 +http://www.iana.org/assignments/media-types/audio/G726-40,audio/G726-40 +http://www.iana.org/assignments/media-types/audio/G728,audio/G728 +http://www.iana.org/assignments/media-types/audio/G729,audio/G729 +http://www.iana.org/assignments/media-types/audio/G7291,audio/G7291 +http://www.iana.org/assignments/media-types/audio/G729D,audio/G729D +http://www.iana.org/assignments/media-types/audio/G729E,audio/G729E +http://www.iana.org/assignments/media-types/audio/GSM,audio/GSM +http://www.iana.org/assignments/media-types/audio/GSM-EFR,audio/GSM-EFR +http://www.iana.org/assignments/media-types/audio/GSM-HR-08,audio/GSM-HR-08 +http://www.iana.org/assignments/media-types/audio/L16,audio/L16 +http://www.iana.org/assignments/media-types/audio/L20,audio/L20 +http://www.iana.org/assignments/media-types/audio/L24,audio/L24 +http://www.iana.org/assignments/media-types/audio/L8,audio/L8 +http://www.iana.org/assignments/media-types/audio/LPC,audio/LPC +http://www.iana.org/assignments/media-types/audio/MELP,audio/MELP +http://www.iana.org/assignments/media-types/audio/MELP1200,audio/MELP1200 +http://www.iana.org/assignments/media-types/audio/MELP2400,audio/MELP2400 +http://www.iana.org/assignments/media-types/audio/MELP600,audio/MELP600 +http://www.iana.org/assignments/media-types/audio/MP4A-LATM,audio/MP4A-LATM +http://www.iana.org/assignments/media-types/audio/MPA,audio/MPA +http://www.iana.org/assignments/media-types/audio/PCMA,audio/PCMA +http://www.iana.org/assignments/media-types/audio/PCMA-WB,audio/PCMA-WB +http://www.iana.org/assignments/media-types/audio/PCMU,audio/PCMU +http://www.iana.org/assignments/media-types/audio/PCMU-WB,audio/PCMU-WB +http://www.iana.org/assignments/media-types/audio/QCELP,audio/QCELP +http://www.iana.org/assignments/media-types/audio/RED,audio/RED +http://www.iana.org/assignments/media-types/audio/SMV,audio/SMV +http://www.iana.org/assignments/media-types/audio/SMV-QCP,audio/SMV-QCP +http://www.iana.org/assignments/media-types/audio/SMV0,audio/SMV0 +http://www.iana.org/assignments/media-types/audio/TETRA_ACELP,audio/TETRA_ACELP +http://www.iana.org/assignments/media-types/audio/TETRA_ACELP_BB,audio/TETRA_ACELP_BB +http://www.iana.org/assignments/media-types/audio/TSVCIS,audio/TSVCIS +http://www.iana.org/assignments/media-types/audio/UEMCLIP,audio/UEMCLIP +http://www.iana.org/assignments/media-types/audio/VDVI,audio/VDVI +http://www.iana.org/assignments/media-types/audio/VMR-WB,audio/VMR-WB +http://www.iana.org/assignments/media-types/audio/aac,audio/aac +http://www.iana.org/assignments/media-types/audio/ac3,audio/ac3 +http://www.iana.org/assignments/media-types/audio/amr-wb+,audio/amr-wb+ +http://www.iana.org/assignments/media-types/audio/aptx,audio/aptx +http://www.iana.org/assignments/media-types/audio/asc,audio/asc +http://www.iana.org/assignments/media-types/audio/basic,audio/basic +http://www.iana.org/assignments/media-types/audio/clearmode,audio/clearmode +http://www.iana.org/assignments/media-types/audio/dls,audio/dls +http://www.iana.org/assignments/media-types/audio/dsr-es201108,audio/dsr-es201108 +http://www.iana.org/assignments/media-types/audio/dsr-es202050,audio/dsr-es202050 +http://www.iana.org/assignments/media-types/audio/dsr-es202211,audio/dsr-es202211 +http://www.iana.org/assignments/media-types/audio/dsr-es202212,audio/dsr-es202212 +http://www.iana.org/assignments/media-types/audio/eac3,audio/eac3 +http://www.iana.org/assignments/media-types/audio/encaprtp,audio/encaprtp +http://www.iana.org/assignments/media-types/audio/example,audio/example +http://www.iana.org/assignments/media-types/audio/flac,audio/flac +http://www.iana.org/assignments/media-types/audio/flexfec,audio/flexfec +http://www.iana.org/assignments/media-types/audio/fwdred,audio/fwdred +http://www.iana.org/assignments/media-types/audio/iLBC,audio/iLBC +http://www.iana.org/assignments/media-types/audio/ip-mr_v2.5,audio/ip-mr_v2.5 +http://www.iana.org/assignments/media-types/audio/matroska,audio/matroska +http://www.iana.org/assignments/media-types/audio/mhas,audio/mhas +http://www.iana.org/assignments/media-types/audio/midi-clip,audio/midi-clip +http://www.iana.org/assignments/media-types/audio/mobile-xmf,audio/mobile-xmf +http://www.iana.org/assignments/media-types/audio/mp4,audio/mp4 +http://www.iana.org/assignments/media-types/audio/mpa-robust,audio/mpa-robust +http://www.iana.org/assignments/media-types/audio/mpeg,audio/mpeg +http://www.iana.org/assignments/media-types/audio/mpeg4-generic,audio/mpeg4-generic +http://www.iana.org/assignments/media-types/audio/ogg,audio/ogg +http://www.iana.org/assignments/media-types/audio/opus,audio/opus +http://www.iana.org/assignments/media-types/audio/parityfec,audio/parityfec +http://www.iana.org/assignments/media-types/audio/prs.sid,audio/prs.sid +http://www.iana.org/assignments/media-types/audio/raptorfec,audio/raptorfec +http://www.iana.org/assignments/media-types/audio/rtp-enc-aescm128,audio/rtp-enc-aescm128 +http://www.iana.org/assignments/media-types/audio/rtp-midi,audio/rtp-midi +http://www.iana.org/assignments/media-types/audio/rtploopback,audio/rtploopback +http://www.iana.org/assignments/media-types/audio/rtx,audio/rtx +http://www.iana.org/assignments/media-types/audio/scip,audio/scip +http://www.iana.org/assignments/media-types/audio/sofa,audio/sofa +http://www.iana.org/assignments/media-types/audio/sp-midi,audio/sp-midi +http://www.iana.org/assignments/media-types/audio/speex,audio/speex +http://www.iana.org/assignments/media-types/audio/t140c,audio/t140c +http://www.iana.org/assignments/media-types/audio/t38,audio/t38 +http://www.iana.org/assignments/media-types/audio/telephone-event,audio/telephone-event +http://www.iana.org/assignments/media-types/audio/tone,audio/tone +http://www.iana.org/assignments/media-types/audio/ulpfec,audio/ulpfec +http://www.iana.org/assignments/media-types/audio/usac,audio/usac +http://www.iana.org/assignments/media-types/audio/vnd.3gpp.iufp,audio/vnd.3gpp.iufp +http://www.iana.org/assignments/media-types/audio/vnd.4SB,audio/vnd.4SB +http://www.iana.org/assignments/media-types/audio/vnd.CELP,audio/vnd.CELP +http://www.iana.org/assignments/media-types/audio/vnd.audiokoz,audio/vnd.audiokoz +http://www.iana.org/assignments/media-types/audio/vnd.cisco.nse,audio/vnd.cisco.nse +http://www.iana.org/assignments/media-types/audio/vnd.cmles.radio-events,audio/vnd.cmles.radio-events +http://www.iana.org/assignments/media-types/audio/vnd.cns.anp1,audio/vnd.cns.anp1 +http://www.iana.org/assignments/media-types/audio/vnd.cns.inf1,audio/vnd.cns.inf1 +http://www.iana.org/assignments/media-types/audio/vnd.dece.audio,audio/vnd.dece.audio +http://www.iana.org/assignments/media-types/audio/vnd.digital-winds,audio/vnd.digital-winds +http://www.iana.org/assignments/media-types/audio/vnd.dlna.adts,audio/vnd.dlna.adts +http://www.iana.org/assignments/media-types/audio/vnd.dolby.heaac.1,audio/vnd.dolby.heaac.1 +http://www.iana.org/assignments/media-types/audio/vnd.dolby.heaac.2,audio/vnd.dolby.heaac.2 +http://www.iana.org/assignments/media-types/audio/vnd.dolby.mlp,audio/vnd.dolby.mlp +http://www.iana.org/assignments/media-types/audio/vnd.dolby.mps,audio/vnd.dolby.mps +http://www.iana.org/assignments/media-types/audio/vnd.dolby.pl2,audio/vnd.dolby.pl2 +http://www.iana.org/assignments/media-types/audio/vnd.dolby.pl2x,audio/vnd.dolby.pl2x +http://www.iana.org/assignments/media-types/audio/vnd.dolby.pl2z,audio/vnd.dolby.pl2z +http://www.iana.org/assignments/media-types/audio/vnd.dolby.pulse.1,audio/vnd.dolby.pulse.1 +http://www.iana.org/assignments/media-types/audio/vnd.dra,audio/vnd.dra +http://www.iana.org/assignments/media-types/audio/vnd.dts,audio/vnd.dts +http://www.iana.org/assignments/media-types/audio/vnd.dts.hd,audio/vnd.dts.hd +http://www.iana.org/assignments/media-types/audio/vnd.dts.uhd,audio/vnd.dts.uhd +http://www.iana.org/assignments/media-types/audio/vnd.dvb.file,audio/vnd.dvb.file +http://www.iana.org/assignments/media-types/audio/vnd.everad.plj,audio/vnd.everad.plj +http://www.iana.org/assignments/media-types/audio/vnd.hns.audio,audio/vnd.hns.audio +http://www.iana.org/assignments/media-types/audio/vnd.lucent.voice,audio/vnd.lucent.voice +http://www.iana.org/assignments/media-types/audio/vnd.ms-playready.media.pya,audio/vnd.ms-playready.media.pya +http://www.iana.org/assignments/media-types/audio/vnd.nokia.mobile-xmf,audio/vnd.nokia.mobile-xmf +http://www.iana.org/assignments/media-types/audio/vnd.nortel.vbk,audio/vnd.nortel.vbk +http://www.iana.org/assignments/media-types/audio/vnd.nuera.ecelp4800,audio/vnd.nuera.ecelp4800 +http://www.iana.org/assignments/media-types/audio/vnd.nuera.ecelp7470,audio/vnd.nuera.ecelp7470 +http://www.iana.org/assignments/media-types/audio/vnd.nuera.ecelp9600,audio/vnd.nuera.ecelp9600 +http://www.iana.org/assignments/media-types/audio/vnd.octel.sbc,audio/vnd.octel.sbc +http://www.iana.org/assignments/media-types/audio/vnd.presonus.multitrack,audio/vnd.presonus.multitrack +http://www.iana.org/assignments/media-types/audio/vnd.qcelp,audio/vnd.qcelp +http://www.iana.org/assignments/media-types/audio/vnd.rhetorex.32kadpcm,audio/vnd.rhetorex.32kadpcm +http://www.iana.org/assignments/media-types/audio/vnd.rip,audio/vnd.rip +http://www.iana.org/assignments/media-types/audio/vnd.sealedmedia.softseal.mpeg,audio/vnd.sealedmedia.softseal.mpeg +http://www.iana.org/assignments/media-types/audio/vnd.vmx.cvsd,audio/vnd.vmx.cvsd +http://www.iana.org/assignments/media-types/audio/vorbis,audio/vorbis +http://www.iana.org/assignments/media-types/audio/vorbis-config,audio/vorbis-config +http://www.iana.org/assignments/media-types/font/collection,font/collection +http://www.iana.org/assignments/media-types/font/otf,font/otf +http://www.iana.org/assignments/media-types/font/sfnt,font/sfnt +http://www.iana.org/assignments/media-types/font/ttf,font/ttf +http://www.iana.org/assignments/media-types/font/woff,font/woff +http://www.iana.org/assignments/media-types/font/woff2,font/woff2 +http://www.iana.org/assignments/media-types/haptics/hjif,haptics/hjif +http://www.iana.org/assignments/media-types/haptics/hmpg,haptics/hmpg +http://www.iana.org/assignments/media-types/haptics/ivs,haptics/ivs +http://www.iana.org/assignments/media-types/image/aces,image/aces +http://www.iana.org/assignments/media-types/image/apng,image/apng +http://www.iana.org/assignments/media-types/image/avci,image/avci +http://www.iana.org/assignments/media-types/image/avcs,image/avcs +http://www.iana.org/assignments/media-types/image/avif,image/avif +http://www.iana.org/assignments/media-types/image/bmp,image/bmp +http://www.iana.org/assignments/media-types/image/cgm,image/cgm +http://www.iana.org/assignments/media-types/image/dicom-rle,image/dicom-rle +http://www.iana.org/assignments/media-types/image/dpx,image/dpx +http://www.iana.org/assignments/media-types/image/emf,image/emf +http://www.iana.org/assignments/media-types/image/example,image/example +http://www.iana.org/assignments/media-types/image/fits,image/fits +http://www.iana.org/assignments/media-types/image/g3fax,image/g3fax +http://www.iana.org/assignments/media-types/image/heic,image/heic +http://www.iana.org/assignments/media-types/image/heic-sequence,image/heic-sequence +http://www.iana.org/assignments/media-types/image/heif,image/heif +http://www.iana.org/assignments/media-types/image/heif-sequence,image/heif-sequence +http://www.iana.org/assignments/media-types/image/hej2k,image/hej2k +http://www.iana.org/assignments/media-types/image/hsj2,image/hsj2 +http://www.iana.org/assignments/media-types/image/j2c,image/j2c +http://www.iana.org/assignments/media-types/image/jls,image/jls +http://www.iana.org/assignments/media-types/image/jp2,image/jp2 +http://www.iana.org/assignments/media-types/image/jph,image/jph +http://www.iana.org/assignments/media-types/image/jphc,image/jphc +http://www.iana.org/assignments/media-types/image/jpm,image/jpm +http://www.iana.org/assignments/media-types/image/jpx,image/jpx +http://www.iana.org/assignments/media-types/image/jxl,image/jxl +http://www.iana.org/assignments/media-types/image/jxr,image/jxr +http://www.iana.org/assignments/media-types/image/jxrA,image/jxrA +http://www.iana.org/assignments/media-types/image/jxrS,image/jxrS +http://www.iana.org/assignments/media-types/image/jxs,image/jxs +http://www.iana.org/assignments/media-types/image/jxsc,image/jxsc +http://www.iana.org/assignments/media-types/image/jxsi,image/jxsi +http://www.iana.org/assignments/media-types/image/jxss,image/jxss +http://www.iana.org/assignments/media-types/image/ktx,image/ktx +http://www.iana.org/assignments/media-types/image/ktx2,image/ktx2 +http://www.iana.org/assignments/media-types/image/naplps,image/naplps +http://www.iana.org/assignments/media-types/image/png,image/png +http://www.iana.org/assignments/media-types/image/prs.btif,image/prs.btif +http://www.iana.org/assignments/media-types/image/prs.pti,image/prs.pti +http://www.iana.org/assignments/media-types/image/pwg-raster,image/pwg-raster +http://www.iana.org/assignments/media-types/image/svg+xml,image/svg+xml +http://www.iana.org/assignments/media-types/image/t38,image/t38 +http://www.iana.org/assignments/media-types/image/tiff,image/tiff +http://www.iana.org/assignments/media-types/image/tiff-fx,image/tiff-fx +http://www.iana.org/assignments/media-types/image/vnd.adobe.photoshop,image/vnd.adobe.photoshop +http://www.iana.org/assignments/media-types/image/vnd.airzip.accelerator.azv,image/vnd.airzip.accelerator.azv +http://www.iana.org/assignments/media-types/image/vnd.cns.inf2,image/vnd.cns.inf2 +http://www.iana.org/assignments/media-types/image/vnd.dece.graphic,image/vnd.dece.graphic +http://www.iana.org/assignments/media-types/image/vnd.djvu,image/vnd.djvu +http://www.iana.org/assignments/media-types/image/vnd.dvb.subtitle,image/vnd.dvb.subtitle +http://www.iana.org/assignments/media-types/image/vnd.dwg,image/vnd.dwg +http://www.iana.org/assignments/media-types/image/vnd.dxf,image/vnd.dxf +http://www.iana.org/assignments/media-types/image/vnd.fastbidsheet,image/vnd.fastbidsheet +http://www.iana.org/assignments/media-types/image/vnd.fpx,image/vnd.fpx +http://www.iana.org/assignments/media-types/image/vnd.fst,image/vnd.fst +http://www.iana.org/assignments/media-types/image/vnd.fujixerox.edmics-mmr,image/vnd.fujixerox.edmics-mmr +http://www.iana.org/assignments/media-types/image/vnd.fujixerox.edmics-rlc,image/vnd.fujixerox.edmics-rlc +http://www.iana.org/assignments/media-types/image/vnd.globalgraphics.pgb,image/vnd.globalgraphics.pgb +http://www.iana.org/assignments/media-types/image/vnd.microsoft.icon,image/vnd.microsoft.icon +http://www.iana.org/assignments/media-types/image/vnd.mix,image/vnd.mix +http://www.iana.org/assignments/media-types/image/vnd.mozilla.apng,image/vnd.mozilla.apng +http://www.iana.org/assignments/media-types/image/vnd.ms-modi,image/vnd.ms-modi +http://www.iana.org/assignments/media-types/image/vnd.net-fpx,image/vnd.net-fpx +http://www.iana.org/assignments/media-types/image/vnd.pco.b16,image/vnd.pco.b16 +http://www.iana.org/assignments/media-types/image/vnd.radiance,image/vnd.radiance +http://www.iana.org/assignments/media-types/image/vnd.sealed.png,image/vnd.sealed.png +http://www.iana.org/assignments/media-types/image/vnd.sealedmedia.softseal.gif,image/vnd.sealedmedia.softseal.gif +http://www.iana.org/assignments/media-types/image/vnd.sealedmedia.softseal.jpg,image/vnd.sealedmedia.softseal.jpg +http://www.iana.org/assignments/media-types/image/vnd.svf,image/vnd.svf +http://www.iana.org/assignments/media-types/image/vnd.tencent.tap,image/vnd.tencent.tap +http://www.iana.org/assignments/media-types/image/vnd.valve.source.texture,image/vnd.valve.source.texture +http://www.iana.org/assignments/media-types/image/vnd.wap.wbmp,image/vnd.wap.wbmp +http://www.iana.org/assignments/media-types/image/vnd.xiff,image/vnd.xiff +http://www.iana.org/assignments/media-types/image/vnd.zbrush.pcx,image/vnd.zbrush.pcx +http://www.iana.org/assignments/media-types/image/webp,image/webp +http://www.iana.org/assignments/media-types/image/wmf,image/wmf +http://www.iana.org/assignments/media-types/message/CPIM,message/CPIM +http://www.iana.org/assignments/media-types/message/bhttp,message/bhttp +http://www.iana.org/assignments/media-types/message/delivery-status,message/delivery-status +http://www.iana.org/assignments/media-types/message/disposition-notification,message/disposition-notification +http://www.iana.org/assignments/media-types/message/example,message/example +http://www.iana.org/assignments/media-types/message/feedback-report,message/feedback-report +http://www.iana.org/assignments/media-types/message/global,message/global +http://www.iana.org/assignments/media-types/message/global-delivery-status,message/global-delivery-status +http://www.iana.org/assignments/media-types/message/global-disposition-notification,message/global-disposition-notification +http://www.iana.org/assignments/media-types/message/global-headers,message/global-headers +http://www.iana.org/assignments/media-types/message/http,message/http +http://www.iana.org/assignments/media-types/message/imdn+xml,message/imdn+xml +http://www.iana.org/assignments/media-types/message/mls,message/mls +http://www.iana.org/assignments/media-types/message/news,message/news +http://www.iana.org/assignments/media-types/message/ohttp-req,message/ohttp-req +http://www.iana.org/assignments/media-types/message/ohttp-res,message/ohttp-res +http://www.iana.org/assignments/media-types/message/s-http,message/s-http +http://www.iana.org/assignments/media-types/message/sip,message/sip +http://www.iana.org/assignments/media-types/message/sipfrag,message/sipfrag +http://www.iana.org/assignments/media-types/message/tracking-status,message/tracking-status +http://www.iana.org/assignments/media-types/message/vnd.si.simp,message/vnd.si.simp +http://www.iana.org/assignments/media-types/message/vnd.wfa.wsc,message/vnd.wfa.wsc +http://www.iana.org/assignments/media-types/model/3mf,model/3mf +http://www.iana.org/assignments/media-types/model/JT,model/JT +http://www.iana.org/assignments/media-types/model/e57,model/e57 +http://www.iana.org/assignments/media-types/model/example,model/example +http://www.iana.org/assignments/media-types/model/gltf+json,model/gltf+json +http://www.iana.org/assignments/media-types/model/gltf-binary,model/gltf-binary +http://www.iana.org/assignments/media-types/model/iges,model/iges +http://www.iana.org/assignments/media-types/model/mtl,model/mtl +http://www.iana.org/assignments/media-types/model/obj,model/obj +http://www.iana.org/assignments/media-types/model/prc,model/prc +http://www.iana.org/assignments/media-types/model/step,model/step +http://www.iana.org/assignments/media-types/model/step+xml,model/step+xml +http://www.iana.org/assignments/media-types/model/step+zip,model/step+zip +http://www.iana.org/assignments/media-types/model/step-xml+zip,model/step-xml+zip +http://www.iana.org/assignments/media-types/model/stl,model/stl +http://www.iana.org/assignments/media-types/model/u3d,model/u3d +http://www.iana.org/assignments/media-types/model/vnd.bary,model/vnd.bary +http://www.iana.org/assignments/media-types/model/vnd.cld,model/vnd.cld +http://www.iana.org/assignments/media-types/model/vnd.collada+xml,model/vnd.collada+xml +http://www.iana.org/assignments/media-types/model/vnd.dwf,model/vnd.dwf +http://www.iana.org/assignments/media-types/model/vnd.flatland.3dml,model/vnd.flatland.3dml +http://www.iana.org/assignments/media-types/model/vnd.gdl,model/vnd.gdl +http://www.iana.org/assignments/media-types/model/vnd.gs-gdl,model/vnd.gs-gdl +http://www.iana.org/assignments/media-types/model/vnd.gtw,model/vnd.gtw +http://www.iana.org/assignments/media-types/model/vnd.moml+xml,model/vnd.moml+xml +http://www.iana.org/assignments/media-types/model/vnd.mts,model/vnd.mts +http://www.iana.org/assignments/media-types/model/vnd.opengex,model/vnd.opengex +http://www.iana.org/assignments/media-types/model/vnd.parasolid.transmit.binary,model/vnd.parasolid.transmit.binary +http://www.iana.org/assignments/media-types/model/vnd.parasolid.transmit.text,model/vnd.parasolid.transmit.text +http://www.iana.org/assignments/media-types/model/vnd.pytha.pyox,model/vnd.pytha.pyox +http://www.iana.org/assignments/media-types/model/vnd.rosette.annotated-data-model,model/vnd.rosette.annotated-data-model +http://www.iana.org/assignments/media-types/model/vnd.sap.vds,model/vnd.sap.vds +http://www.iana.org/assignments/media-types/model/vnd.usda,model/vnd.usda +http://www.iana.org/assignments/media-types/model/vnd.usdz+zip,model/vnd.usdz+zip +http://www.iana.org/assignments/media-types/model/vnd.valve.source.compiled-map,model/vnd.valve.source.compiled-map +http://www.iana.org/assignments/media-types/model/vnd.vtu,model/vnd.vtu +http://www.iana.org/assignments/media-types/model/x3d+fastinfoset,model/x3d+fastinfoset +http://www.iana.org/assignments/media-types/model/x3d+xml,model/x3d+xml +http://www.iana.org/assignments/media-types/model/x3d-vrml,model/x3d-vrml +http://www.iana.org/assignments/media-types/multipart/appledouble,multipart/appledouble +http://www.iana.org/assignments/media-types/multipart/byteranges,multipart/byteranges +http://www.iana.org/assignments/media-types/multipart/encrypted,multipart/encrypted +http://www.iana.org/assignments/media-types/multipart/example,multipart/example +http://www.iana.org/assignments/media-types/multipart/form-data,multipart/form-data +http://www.iana.org/assignments/media-types/multipart/header-set,multipart/header-set +http://www.iana.org/assignments/media-types/multipart/multilingual,multipart/multilingual +http://www.iana.org/assignments/media-types/multipart/related,multipart/related +http://www.iana.org/assignments/media-types/multipart/report,multipart/report +http://www.iana.org/assignments/media-types/multipart/signed,multipart/signed +http://www.iana.org/assignments/media-types/multipart/vnd.bint.med-plus,multipart/vnd.bint.med-plus +http://www.iana.org/assignments/media-types/multipart/voice-message,multipart/voice-message +http://www.iana.org/assignments/media-types/multipart/x-mixed-replace,multipart/x-mixed-replace +http://www.iana.org/assignments/media-types/text/1d-interleaved-parityfec,text/1d-interleaved-parityfec +http://www.iana.org/assignments/media-types/text/RED,text/RED +http://www.iana.org/assignments/media-types/text/SGML,text/SGML +http://www.iana.org/assignments/media-types/text/cache-manifest,text/cache-manifest +http://www.iana.org/assignments/media-types/text/calendar,text/calendar +http://www.iana.org/assignments/media-types/text/cql,text/cql +http://www.iana.org/assignments/media-types/text/cql-expression,text/cql-expression +http://www.iana.org/assignments/media-types/text/cql-identifier,text/cql-identifier +http://www.iana.org/assignments/media-types/text/css,text/css +http://www.iana.org/assignments/media-types/text/csv,text/csv +http://www.iana.org/assignments/media-types/text/csv-schema,text/csv-schema +http://www.iana.org/assignments/media-types/text/directory,text/directory +http://www.iana.org/assignments/media-types/text/dns,text/dns +http://www.iana.org/assignments/media-types/text/ecmascript,text/ecmascript +http://www.iana.org/assignments/media-types/text/encaprtp,text/encaprtp +http://www.iana.org/assignments/media-types/text/example,text/example +http://www.iana.org/assignments/media-types/text/fhirpath,text/fhirpath +http://www.iana.org/assignments/media-types/text/flexfec,text/flexfec +http://www.iana.org/assignments/media-types/text/fwdred,text/fwdred +http://www.iana.org/assignments/media-types/text/gff3,text/gff3 +http://www.iana.org/assignments/media-types/text/grammar-ref-list,text/grammar-ref-list +http://www.iana.org/assignments/media-types/text/hl7v2,text/hl7v2 +http://www.iana.org/assignments/media-types/text/html,text/html +http://www.iana.org/assignments/media-types/text/javascript,text/javascript +http://www.iana.org/assignments/media-types/text/jcr-cnd,text/jcr-cnd +http://www.iana.org/assignments/media-types/text/markdown,text/markdown +http://www.iana.org/assignments/media-types/text/mizar,text/mizar +http://www.iana.org/assignments/media-types/text/n3,text/n3 +http://www.iana.org/assignments/media-types/text/parameters,text/parameters +http://www.iana.org/assignments/media-types/text/parityfec,text/parityfec +http://www.iana.org/assignments/media-types/text/provenance-notation,text/provenance-notation +http://www.iana.org/assignments/media-types/text/prs.fallenstein.rst,text/prs.fallenstein.rst +http://www.iana.org/assignments/media-types/text/prs.lines.tag,text/prs.lines.tag +http://www.iana.org/assignments/media-types/text/prs.prop.logic,text/prs.prop.logic +http://www.iana.org/assignments/media-types/text/prs.texi,text/prs.texi +http://www.iana.org/assignments/media-types/text/raptorfec,text/raptorfec +http://www.iana.org/assignments/media-types/text/rfc822-headers,text/rfc822-headers +http://www.iana.org/assignments/media-types/text/rtf,text/rtf +http://www.iana.org/assignments/media-types/text/rtp-enc-aescm128,text/rtp-enc-aescm128 +http://www.iana.org/assignments/media-types/text/rtploopback,text/rtploopback +http://www.iana.org/assignments/media-types/text/rtx,text/rtx +http://www.iana.org/assignments/media-types/text/shaclc,text/shaclc +http://www.iana.org/assignments/media-types/text/shex,text/shex +http://www.iana.org/assignments/media-types/text/spdx,text/spdx +http://www.iana.org/assignments/media-types/text/strings,text/strings +http://www.iana.org/assignments/media-types/text/t140,text/t140 +http://www.iana.org/assignments/media-types/text/tab-separated-values,text/tab-separated-values +http://www.iana.org/assignments/media-types/text/troff,text/troff +http://www.iana.org/assignments/media-types/text/turtle,text/turtle +http://www.iana.org/assignments/media-types/text/ulpfec,text/ulpfec +http://www.iana.org/assignments/media-types/text/uri-list,text/uri-list +http://www.iana.org/assignments/media-types/text/vcard,text/vcard +http://www.iana.org/assignments/media-types/text/vnd.DMClientScript,text/vnd.DMClientScript +http://www.iana.org/assignments/media-types/text/vnd.IPTC.NITF,text/vnd.IPTC.NITF +http://www.iana.org/assignments/media-types/text/vnd.IPTC.NewsML,text/vnd.IPTC.NewsML +http://www.iana.org/assignments/media-types/text/vnd.a,text/vnd.a +http://www.iana.org/assignments/media-types/text/vnd.abc,text/vnd.abc +http://www.iana.org/assignments/media-types/text/vnd.ascii-art,text/vnd.ascii-art +http://www.iana.org/assignments/media-types/text/vnd.curl,text/vnd.curl +http://www.iana.org/assignments/media-types/text/vnd.debian.copyright,text/vnd.debian.copyright +http://www.iana.org/assignments/media-types/text/vnd.dvb.subtitle,text/vnd.dvb.subtitle +http://www.iana.org/assignments/media-types/text/vnd.esmertec.theme-descriptor,text/vnd.esmertec.theme-descriptor +http://www.iana.org/assignments/media-types/text/vnd.exchangeable,text/vnd.exchangeable +http://www.iana.org/assignments/media-types/text/vnd.familysearch.gedcom,text/vnd.familysearch.gedcom +http://www.iana.org/assignments/media-types/text/vnd.ficlab.flt,text/vnd.ficlab.flt +http://www.iana.org/assignments/media-types/text/vnd.fly,text/vnd.fly +http://www.iana.org/assignments/media-types/text/vnd.fmi.flexstor,text/vnd.fmi.flexstor +http://www.iana.org/assignments/media-types/text/vnd.gml,text/vnd.gml +http://www.iana.org/assignments/media-types/text/vnd.graphviz,text/vnd.graphviz +http://www.iana.org/assignments/media-types/text/vnd.hans,text/vnd.hans +http://www.iana.org/assignments/media-types/text/vnd.hgl,text/vnd.hgl +http://www.iana.org/assignments/media-types/text/vnd.in3d.3dml,text/vnd.in3d.3dml +http://www.iana.org/assignments/media-types/text/vnd.in3d.spot,text/vnd.in3d.spot +http://www.iana.org/assignments/media-types/text/vnd.latex-z,text/vnd.latex-z +http://www.iana.org/assignments/media-types/text/vnd.motorola.reflex,text/vnd.motorola.reflex +http://www.iana.org/assignments/media-types/text/vnd.ms-mediapackage,text/vnd.ms-mediapackage +http://www.iana.org/assignments/media-types/text/vnd.net2phone.commcenter.command,text/vnd.net2phone.commcenter.command +http://www.iana.org/assignments/media-types/text/vnd.radisys.msml-basic-layout,text/vnd.radisys.msml-basic-layout +http://www.iana.org/assignments/media-types/text/vnd.senx.warpscript,text/vnd.senx.warpscript +http://www.iana.org/assignments/media-types/text/vnd.si.uricatalogue,text/vnd.si.uricatalogue +http://www.iana.org/assignments/media-types/text/vnd.sosi,text/vnd.sosi +http://www.iana.org/assignments/media-types/text/vnd.sun.j2me.app-descriptor,text/vnd.sun.j2me.app-descriptor +http://www.iana.org/assignments/media-types/text/vnd.trolltech.linguist,text/vnd.trolltech.linguist +http://www.iana.org/assignments/media-types/text/vnd.vcf,text/vnd.vcf +http://www.iana.org/assignments/media-types/text/vnd.wap.si,text/vnd.wap.si +http://www.iana.org/assignments/media-types/text/vnd.wap.sl,text/vnd.wap.sl +http://www.iana.org/assignments/media-types/text/vnd.wap.wml,text/vnd.wap.wml +http://www.iana.org/assignments/media-types/text/vnd.wap.wmlscript,text/vnd.wap.wmlscript +http://www.iana.org/assignments/media-types/text/vnd.zoo.kcl,text/vnd.zoo.kcl +http://www.iana.org/assignments/media-types/text/vtt,text/vtt +http://www.iana.org/assignments/media-types/text/wgsl,text/wgsl +http://www.iana.org/assignments/media-types/text/xml,text/xml +http://www.iana.org/assignments/media-types/text/xml-external-parsed-entity,text/xml-external-parsed-entity +http://www.iana.org/assignments/media-types/video/1d-interleaved-parityfec,video/1d-interleaved-parityfec +http://www.iana.org/assignments/media-types/video/3gpp,video/3gpp +http://www.iana.org/assignments/media-types/video/3gpp-tt,video/3gpp-tt +http://www.iana.org/assignments/media-types/video/3gpp2,video/3gpp2 +http://www.iana.org/assignments/media-types/video/AV1,video/AV1 +http://www.iana.org/assignments/media-types/video/BMPEG,video/BMPEG +http://www.iana.org/assignments/media-types/video/BT656,video/BT656 +http://www.iana.org/assignments/media-types/video/CelB,video/CelB +http://www.iana.org/assignments/media-types/video/DV,video/DV +http://www.iana.org/assignments/media-types/video/FFV1,video/FFV1 +http://www.iana.org/assignments/media-types/video/H261,video/H261 +http://www.iana.org/assignments/media-types/video/H263,video/H263 +http://www.iana.org/assignments/media-types/video/H263-1998,video/H263-1998 +http://www.iana.org/assignments/media-types/video/H263-2000,video/H263-2000 +http://www.iana.org/assignments/media-types/video/H264,video/H264 +http://www.iana.org/assignments/media-types/video/H264-RCDO,video/H264-RCDO +http://www.iana.org/assignments/media-types/video/H264-SVC,video/H264-SVC +http://www.iana.org/assignments/media-types/video/H265,video/H265 +http://www.iana.org/assignments/media-types/video/H266,video/H266 +http://www.iana.org/assignments/media-types/video/JPEG,video/JPEG +http://www.iana.org/assignments/media-types/video/MP1S,video/MP1S +http://www.iana.org/assignments/media-types/video/MP2P,video/MP2P +http://www.iana.org/assignments/media-types/video/MP2T,video/MP2T +http://www.iana.org/assignments/media-types/video/MP4V-ES,video/MP4V-ES +http://www.iana.org/assignments/media-types/video/MPV,video/MPV +http://www.iana.org/assignments/media-types/video/SMPTE292M,video/SMPTE292M +http://www.iana.org/assignments/media-types/video/VP8,video/VP8 +http://www.iana.org/assignments/media-types/video/VP9,video/VP9 +http://www.iana.org/assignments/media-types/video/encaprtp,video/encaprtp +http://www.iana.org/assignments/media-types/video/evc,video/evc +http://www.iana.org/assignments/media-types/video/example,video/example +http://www.iana.org/assignments/media-types/video/flexfec,video/flexfec +http://www.iana.org/assignments/media-types/video/iso.segment,video/iso.segment +http://www.iana.org/assignments/media-types/video/jpeg2000,video/jpeg2000 +http://www.iana.org/assignments/media-types/video/jxsv,video/jxsv +http://www.iana.org/assignments/media-types/video/matroska,video/matroska +http://www.iana.org/assignments/media-types/video/matroska-3d,video/matroska-3d +http://www.iana.org/assignments/media-types/video/mj2,video/mj2 +http://www.iana.org/assignments/media-types/video/mp4,video/mp4 +http://www.iana.org/assignments/media-types/video/mpeg4-generic,video/mpeg4-generic +http://www.iana.org/assignments/media-types/video/nv,video/nv +http://www.iana.org/assignments/media-types/video/ogg,video/ogg +http://www.iana.org/assignments/media-types/video/parityfec,video/parityfec +http://www.iana.org/assignments/media-types/video/pointer,video/pointer +http://www.iana.org/assignments/media-types/video/quicktime,video/quicktime +http://www.iana.org/assignments/media-types/video/raptorfec,video/raptorfec +http://www.iana.org/assignments/media-types/video/raw,video/raw +http://www.iana.org/assignments/media-types/video/rtp-enc-aescm128,video/rtp-enc-aescm128 +http://www.iana.org/assignments/media-types/video/rtploopback,video/rtploopback +http://www.iana.org/assignments/media-types/video/rtx,video/rtx +http://www.iana.org/assignments/media-types/video/scip,video/scip +http://www.iana.org/assignments/media-types/video/smpte291,video/smpte291 +http://www.iana.org/assignments/media-types/video/ulpfec,video/ulpfec +http://www.iana.org/assignments/media-types/video/vc1,video/vc1 +http://www.iana.org/assignments/media-types/video/vc2,video/vc2 +http://www.iana.org/assignments/media-types/video/vnd.CCTV,video/vnd.CCTV +http://www.iana.org/assignments/media-types/video/vnd.dece.hd,video/vnd.dece.hd +http://www.iana.org/assignments/media-types/video/vnd.dece.mobile,video/vnd.dece.mobile +http://www.iana.org/assignments/media-types/video/vnd.dece.mp4,video/vnd.dece.mp4 +http://www.iana.org/assignments/media-types/video/vnd.dece.pd,video/vnd.dece.pd +http://www.iana.org/assignments/media-types/video/vnd.dece.sd,video/vnd.dece.sd +http://www.iana.org/assignments/media-types/video/vnd.dece.video,video/vnd.dece.video +http://www.iana.org/assignments/media-types/video/vnd.directv.mpeg,video/vnd.directv.mpeg +http://www.iana.org/assignments/media-types/video/vnd.directv.mpeg-tts,video/vnd.directv.mpeg-tts +http://www.iana.org/assignments/media-types/video/vnd.dlna.mpeg-tts,video/vnd.dlna.mpeg-tts +http://www.iana.org/assignments/media-types/video/vnd.dvb.file,video/vnd.dvb.file +http://www.iana.org/assignments/media-types/video/vnd.fvt,video/vnd.fvt +http://www.iana.org/assignments/media-types/video/vnd.hns.video,video/vnd.hns.video +http://www.iana.org/assignments/media-types/video/vnd.iptvforum.1dparityfec-1010,video/vnd.iptvforum.1dparityfec-1010 +http://www.iana.org/assignments/media-types/video/vnd.iptvforum.1dparityfec-2005,video/vnd.iptvforum.1dparityfec-2005 +http://www.iana.org/assignments/media-types/video/vnd.iptvforum.2dparityfec-1010,video/vnd.iptvforum.2dparityfec-1010 +http://www.iana.org/assignments/media-types/video/vnd.iptvforum.2dparityfec-2005,video/vnd.iptvforum.2dparityfec-2005 +http://www.iana.org/assignments/media-types/video/vnd.iptvforum.ttsavc,video/vnd.iptvforum.ttsavc +http://www.iana.org/assignments/media-types/video/vnd.iptvforum.ttsmpeg2,video/vnd.iptvforum.ttsmpeg2 +http://www.iana.org/assignments/media-types/video/vnd.motorola.video,video/vnd.motorola.video +http://www.iana.org/assignments/media-types/video/vnd.motorola.videop,video/vnd.motorola.videop +http://www.iana.org/assignments/media-types/video/vnd.mpegurl,video/vnd.mpegurl +http://www.iana.org/assignments/media-types/video/vnd.ms-playready.media.pyv,video/vnd.ms-playready.media.pyv +http://www.iana.org/assignments/media-types/video/vnd.nokia.interleaved-multimedia,video/vnd.nokia.interleaved-multimedia +http://www.iana.org/assignments/media-types/video/vnd.nokia.mp4vr,video/vnd.nokia.mp4vr +http://www.iana.org/assignments/media-types/video/vnd.nokia.videovoip,video/vnd.nokia.videovoip +http://www.iana.org/assignments/media-types/video/vnd.objectvideo,video/vnd.objectvideo +http://www.iana.org/assignments/media-types/video/vnd.radgamettools.bink,video/vnd.radgamettools.bink +http://www.iana.org/assignments/media-types/video/vnd.radgamettools.smacker,video/vnd.radgamettools.smacker +http://www.iana.org/assignments/media-types/video/vnd.sealed.mpeg1,video/vnd.sealed.mpeg1 +http://www.iana.org/assignments/media-types/video/vnd.sealed.mpeg4,video/vnd.sealed.mpeg4 +http://www.iana.org/assignments/media-types/video/vnd.sealed.swf,video/vnd.sealed.swf +http://www.iana.org/assignments/media-types/video/vnd.sealedmedia.softseal.mov,video/vnd.sealedmedia.softseal.mov +http://www.iana.org/assignments/media-types/video/vnd.uvvu.mp4,video/vnd.uvvu.mp4 +http://www.iana.org/assignments/media-types/video/vnd.vivo,video/vnd.vivo +http://www.iana.org/assignments/media-types/video/vnd.youtube.yt,video/vnd.youtube.yt diff --git a/ckanext/schemingdcat/codelists/dcat/csv/machine-readable.csv b/ckanext/schemingdcat/codelists/dcat/csv/machine-readable.csv new file mode 100644 index 0000000..9e7e705 --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/csv/machine-readable.csv @@ -0,0 +1,215 @@ +http://publications.europa.eu/resource/authority/file-type/7Z,7Z +http://publications.europa.eu/resource/authority/file-type/AAB,AAB +http://publications.europa.eu/resource/authority/file-type/AAC,AAC +http://publications.europa.eu/resource/authority/file-type/AKN4EU,AKN4EU +http://publications.europa.eu/resource/authority/file-type/AKN4EU_ZIP,AKN4EU_ZIP +http://publications.europa.eu/resource/authority/file-type/APK,APK +http://publications.europa.eu/resource/authority/file-type/APPX,APPX +http://publications.europa.eu/resource/authority/file-type/ARC,ARC +http://publications.europa.eu/resource/authority/file-type/ARCINFO_COV,ARCINFO_COV +http://publications.europa.eu/resource/authority/file-type/ARC_GZ,ARC_GZ +http://publications.europa.eu/resource/authority/file-type/ARJ,ARJ +http://publications.europa.eu/resource/authority/file-type/ARROW_FILE,ARROW_FILE +http://publications.europa.eu/resource/authority/file-type/ARROW_STREAM,ARROW_STREAM +http://publications.europa.eu/resource/authority/file-type/ATOM,ATOM +http://publications.europa.eu/resource/authority/file-type/AZW,AZW +http://publications.europa.eu/resource/authority/file-type/BIN,BIN +http://publications.europa.eu/resource/authority/file-type/BITS,BITS +http://publications.europa.eu/resource/authority/file-type/BMP,BMP +http://publications.europa.eu/resource/authority/file-type/BWF,BWF +http://publications.europa.eu/resource/authority/file-type/BZIP2,BZIP2 +http://publications.europa.eu/resource/authority/file-type/CSS,CSS +http://publications.europa.eu/resource/authority/file-type/CSV,CSV +http://publications.europa.eu/resource/authority/file-type/DAPK,DAPK +http://publications.europa.eu/resource/authority/file-type/DBF,DBF +http://publications.europa.eu/resource/authority/file-type/DCR,DCR +http://publications.europa.eu/resource/authority/file-type/DEB,DEB +http://publications.europa.eu/resource/authority/file-type/DGN,DGN +http://publications.europa.eu/resource/authority/file-type/DMG,DMG +http://publications.europa.eu/resource/authority/file-type/DMP,DMP +http://publications.europa.eu/resource/authority/file-type/DOC,DOC +http://publications.europa.eu/resource/authority/file-type/DOCX,DOCX +http://publications.europa.eu/resource/authority/file-type/DTD_SGML,DTD_SGML +http://publications.europa.eu/resource/authority/file-type/DTD_XML,DTD_XML +http://publications.europa.eu/resource/authority/file-type/DWCA,DWCA +http://publications.europa.eu/resource/authority/file-type/DWG,DWG +http://publications.europa.eu/resource/authority/file-type/DXF,DXF +http://publications.europa.eu/resource/authority/file-type/E00,E00 +http://publications.europa.eu/resource/authority/file-type/EAR,EAR +http://publications.europa.eu/resource/authority/file-type/ECW,ECW +http://publications.europa.eu/resource/authority/file-type/EFORMS_XML,EFORMS_XML +http://publications.europa.eu/resource/authority/file-type/EPS,EPS +http://publications.europa.eu/resource/authority/file-type/EPUB,EPUB +http://publications.europa.eu/resource/authority/file-type/ETSI_TSL,ETSI_TSL +http://publications.europa.eu/resource/authority/file-type/ETSI_XML,ETSI_XML +http://publications.europa.eu/resource/authority/file-type/EXE,EXE +http://publications.europa.eu/resource/authority/file-type/FMX2,FMX2 +http://publications.europa.eu/resource/authority/file-type/FMX3,FMX3 +http://publications.europa.eu/resource/authority/file-type/FMX4,FMX4 +http://publications.europa.eu/resource/authority/file-type/FMX4_ZIP,FMX4_ZIP +http://publications.europa.eu/resource/authority/file-type/GDB,GDB +http://publications.europa.eu/resource/authority/file-type/GEOJSON,GEOJSON +http://publications.europa.eu/resource/authority/file-type/GEOTIFF,GEOTIFF +http://publications.europa.eu/resource/authority/file-type/GIF,GIF +http://publications.europa.eu/resource/authority/file-type/GML,GML +http://publications.europa.eu/resource/authority/file-type/GMZ,GMZ +http://publications.europa.eu/resource/authority/file-type/GPKG,GPKG +http://publications.europa.eu/resource/authority/file-type/GPX,GPX +http://publications.europa.eu/resource/authority/file-type/GRID,GRID +http://publications.europa.eu/resource/authority/file-type/GRID_ASCII,GRID_ASCII +http://publications.europa.eu/resource/authority/file-type/GTFS,GTFS +http://publications.europa.eu/resource/authority/file-type/GZIP,GZIP +http://publications.europa.eu/resource/authority/file-type/HDF,HDF +http://publications.europa.eu/resource/authority/file-type/HDT,HDT +http://publications.europa.eu/resource/authority/file-type/HTML,HTML +http://publications.europa.eu/resource/authority/file-type/HTML5,HTML5 +http://publications.europa.eu/resource/authority/file-type/HTML_SIMPL,HTML_SIMPL +http://publications.europa.eu/resource/authority/file-type/ICS,ICS +http://publications.europa.eu/resource/authority/file-type/IMMC_XML,IMMC_XML +http://publications.europa.eu/resource/authority/file-type/INDD,INDD +http://publications.europa.eu/resource/authority/file-type/IPA,IPA +http://publications.europa.eu/resource/authority/file-type/ISO,ISO +http://publications.europa.eu/resource/authority/file-type/ISO_ZIP,ISO_ZIP +http://publications.europa.eu/resource/authority/file-type/JAR,JAR +http://publications.europa.eu/resource/authority/file-type/JATS,JATS +http://publications.europa.eu/resource/authority/file-type/JPEG,JPEG +http://publications.europa.eu/resource/authority/file-type/JPEG2000,JPEG2000 +http://publications.europa.eu/resource/authority/file-type/JS,JS +http://publications.europa.eu/resource/authority/file-type/JSON,JSON +http://publications.europa.eu/resource/authority/file-type/JSON_LD,JSON_LD +http://publications.europa.eu/resource/authority/file-type/KML,KML +http://publications.europa.eu/resource/authority/file-type/KMZ,KMZ +http://publications.europa.eu/resource/authority/file-type/LAS,LAS +http://publications.europa.eu/resource/authority/file-type/LAZ,LAZ +http://publications.europa.eu/resource/authority/file-type/LEG,LEG +http://publications.europa.eu/resource/authority/file-type/LEGALHTML,LEGALHTML +http://publications.europa.eu/resource/authority/file-type/LHA,LHA +http://publications.europa.eu/resource/authority/file-type/LPK,LPK +http://publications.europa.eu/resource/authority/file-type/LZIP,LZIP +http://publications.europa.eu/resource/authority/file-type/LZMA,LZMA +http://publications.europa.eu/resource/authority/file-type/LZO,LZO +http://publications.europa.eu/resource/authority/file-type/MAP_PRVW,MAP_PRVW +http://publications.europa.eu/resource/authority/file-type/MAP_SRVC,MAP_SRVC +http://publications.europa.eu/resource/authority/file-type/MARKDOWN,MARKDOWN +http://publications.europa.eu/resource/authority/file-type/MATHML,MATHML +http://publications.europa.eu/resource/authority/file-type/MBOX,MBOX +http://publications.europa.eu/resource/authority/file-type/MDB,MDB +http://publications.europa.eu/resource/authority/file-type/METS,METS +http://publications.europa.eu/resource/authority/file-type/METS_ZIP,METS_ZIP +http://publications.europa.eu/resource/authority/file-type/MHTML,MHTML +http://publications.europa.eu/resource/authority/file-type/MIF_MID,MIF_MID +http://publications.europa.eu/resource/authority/file-type/MOBI,MOBI +http://publications.europa.eu/resource/authority/file-type/MOP,MOP +http://publications.europa.eu/resource/authority/file-type/MOV,MOV +http://publications.europa.eu/resource/authority/file-type/MP3,MP3 +http://publications.europa.eu/resource/authority/file-type/MPEG2,MPEG2 +http://publications.europa.eu/resource/authority/file-type/MPEG4,MPEG4 +http://publications.europa.eu/resource/authority/file-type/MPEG4_AVC,MPEG4_AVC +http://publications.europa.eu/resource/authority/file-type/MRSID,MRSID +http://publications.europa.eu/resource/authority/file-type/MSG_HTTP,MSG_HTTP +http://publications.europa.eu/resource/authority/file-type/MSI,MSI +http://publications.europa.eu/resource/authority/file-type/MXD,MXD +http://publications.europa.eu/resource/authority/file-type/N3,N3 +http://publications.europa.eu/resource/authority/file-type/NETCDF,NETCDF +http://publications.europa.eu/resource/authority/file-type/OAPK,OAPK +http://publications.europa.eu/resource/authority/file-type/OCTET,OCTET +http://publications.europa.eu/resource/authority/file-type/ODB,ODB +http://publications.europa.eu/resource/authority/file-type/ODC,ODC +http://publications.europa.eu/resource/authority/file-type/ODF,ODF +http://publications.europa.eu/resource/authority/file-type/ODG,ODG +http://publications.europa.eu/resource/authority/file-type/ODP,ODP +http://publications.europa.eu/resource/authority/file-type/ODS,ODS +http://publications.europa.eu/resource/authority/file-type/ODT,ODT +http://publications.europa.eu/resource/authority/file-type/OP_DATPRO,OP_DATPRO +http://publications.europa.eu/resource/authority/file-type/OVF,OVF +http://publications.europa.eu/resource/authority/file-type/OWL,OWL +http://publications.europa.eu/resource/authority/file-type/PARQUET,PARQUET +http://publications.europa.eu/resource/authority/file-type/PDF,PDF +http://publications.europa.eu/resource/authority/file-type/PDF1X,PDF1X +http://publications.europa.eu/resource/authority/file-type/PDFA1A,PDFA1A +http://publications.europa.eu/resource/authority/file-type/PDFA1B,PDFA1B +http://publications.europa.eu/resource/authority/file-type/PDFA2A,PDFA2A +http://publications.europa.eu/resource/authority/file-type/PDFA2B,PDFA2B +http://publications.europa.eu/resource/authority/file-type/PDFA3,PDFA3 +http://publications.europa.eu/resource/authority/file-type/PDFUA,PDFUA +http://publications.europa.eu/resource/authority/file-type/PDFX,PDFX +http://publications.europa.eu/resource/authority/file-type/PDFX1A,PDFX1A +http://publications.europa.eu/resource/authority/file-type/PDFX2A,PDFX2A +http://publications.europa.eu/resource/authority/file-type/PDFX4,PDFX4 +http://publications.europa.eu/resource/authority/file-type/PL,PL +http://publications.europa.eu/resource/authority/file-type/PNG,PNG +http://publications.europa.eu/resource/authority/file-type/PPS,PPS +http://publications.europa.eu/resource/authority/file-type/PPSX,PPSX +http://publications.europa.eu/resource/authority/file-type/PPT,PPT +http://publications.europa.eu/resource/authority/file-type/PPTX,PPTX +http://publications.europa.eu/resource/authority/file-type/PS,PS +http://publications.europa.eu/resource/authority/file-type/PSD,PSD +http://publications.europa.eu/resource/authority/file-type/PWP,PWP +http://publications.europa.eu/resource/authority/file-type/QGS,QGS +http://publications.europa.eu/resource/authority/file-type/RAR,RAR +http://publications.europa.eu/resource/authority/file-type/RDF,RDF +http://publications.europa.eu/resource/authority/file-type/RDFA,RDFA +http://publications.europa.eu/resource/authority/file-type/RDF_N_QUADS,RDF_N_QUADS +http://publications.europa.eu/resource/authority/file-type/RDF_N_TRIPLES,RDF_N_TRIPLES +http://publications.europa.eu/resource/authority/file-type/RDF_THRIFT,RDF_THRIFT +http://publications.europa.eu/resource/authority/file-type/RDF_TRIG,RDF_TRIG +http://publications.europa.eu/resource/authority/file-type/RDF_TRIX,RDF_TRIX +http://publications.europa.eu/resource/authority/file-type/RDF_TURTLE,RDF_TURTLE +http://publications.europa.eu/resource/authority/file-type/RDF_XML,RDF_XML +http://publications.europa.eu/resource/authority/file-type/REST,REST +http://publications.europa.eu/resource/authority/file-type/RPM,RPM +http://publications.europa.eu/resource/authority/file-type/RSS,RSS +http://publications.europa.eu/resource/authority/file-type/RTF,RTF +http://publications.europa.eu/resource/authority/file-type/SB3,SB3 +http://publications.europa.eu/resource/authority/file-type/SCHEMA_XML,SCHEMA_XML +http://publications.europa.eu/resource/authority/file-type/SDMX,SDMX +http://publications.europa.eu/resource/authority/file-type/SGML,SGML +http://publications.europa.eu/resource/authority/file-type/SHP,SHP +http://publications.europa.eu/resource/authority/file-type/SKOS_XML,SKOS_XML +http://publications.europa.eu/resource/authority/file-type/SPARQLQ,SPARQLQ +http://publications.europa.eu/resource/authority/file-type/SPARQLQRES,SPARQLQRES +http://publications.europa.eu/resource/authority/file-type/SQL,SQL +http://publications.europa.eu/resource/authority/file-type/STL,STL +http://publications.europa.eu/resource/authority/file-type/SVG,SVG +http://publications.europa.eu/resource/authority/file-type/SWM,SWM +http://publications.europa.eu/resource/authority/file-type/TAB,TAB +http://publications.europa.eu/resource/authority/file-type/TAB_RSTR,TAB_RSTR +http://publications.europa.eu/resource/authority/file-type/TAR,TAR +http://publications.europa.eu/resource/authority/file-type/TAR_GZ,TAR_GZ +http://publications.europa.eu/resource/authority/file-type/TAR_XZ,TAR_XZ +http://publications.europa.eu/resource/authority/file-type/THRIFT_BINARY,THRIFT_BINARY +http://publications.europa.eu/resource/authority/file-type/THRIFT_COMPACT,THRIFT_COMPACT +http://publications.europa.eu/resource/authority/file-type/THRIFT_JSON,THRIFT_JSON +http://publications.europa.eu/resource/authority/file-type/TIFF,TIFF +http://publications.europa.eu/resource/authority/file-type/TIFF_FX,TIFF_FX +http://publications.europa.eu/resource/authority/file-type/TMX,TMX +http://publications.europa.eu/resource/authority/file-type/TSV,TSV +http://publications.europa.eu/resource/authority/file-type/TXT,TXT +http://publications.europa.eu/resource/authority/file-type/UNGEN,UNGEN +http://publications.europa.eu/resource/authority/file-type/WAR,WAR +http://publications.europa.eu/resource/authority/file-type/WARC,WARC +http://publications.europa.eu/resource/authority/file-type/WARC_GZ,WARC_GZ +http://publications.europa.eu/resource/authority/file-type/WAV,WAV +http://publications.europa.eu/resource/authority/file-type/WCS_SRVC,WCS_SRVC +http://publications.europa.eu/resource/authority/file-type/WEBP,WEBP +http://publications.europa.eu/resource/authority/file-type/WFS_SRVC,WFS_SRVC +http://publications.europa.eu/resource/authority/file-type/WIM,WIM +http://publications.europa.eu/resource/authority/file-type/WMS_SRVC,WMS_SRVC +http://publications.europa.eu/resource/authority/file-type/WMTS_SRVC,WMTS_SRVC +http://publications.europa.eu/resource/authority/file-type/WORLD,WORLD +http://publications.europa.eu/resource/authority/file-type/XHTML,XHTML +http://publications.europa.eu/resource/authority/file-type/XHTML5,XHTML5 +http://publications.europa.eu/resource/authority/file-type/XHTML_SIMPL,XHTML_SIMPL +http://publications.europa.eu/resource/authority/file-type/XLIFF,XLIFF +http://publications.europa.eu/resource/authority/file-type/XLS,XLS +http://publications.europa.eu/resource/authority/file-type/XLSB,XLSB +http://publications.europa.eu/resource/authority/file-type/XLSM,XLSM +http://publications.europa.eu/resource/authority/file-type/XLSX,XLSX +http://publications.europa.eu/resource/authority/file-type/XML,XML +http://publications.europa.eu/resource/authority/file-type/XSLFO,XSLFO +http://publications.europa.eu/resource/authority/file-type/XSLT,XSLT +http://publications.europa.eu/resource/authority/file-type/XYZ,XYZ +http://publications.europa.eu/resource/authority/file-type/XZ,XZ +http://publications.europa.eu/resource/authority/file-type/YAML,YAML +http://publications.europa.eu/resource/authority/file-type/Z,Z +http://publications.europa.eu/resource/authority/file-type/ZIP,ZIP diff --git a/ckanext/schemingdcat/codelists/dcat/csv/non-propietary.csv b/ckanext/schemingdcat/codelists/dcat/csv/non-propietary.csv new file mode 100644 index 0000000..cba49be --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/csv/non-propietary.csv @@ -0,0 +1,32 @@ +http://publications.europa.eu/resource/authority/file-type/BMP,BMP +http://publications.europa.eu/resource/authority/file-type/CSV,CSV +http://publications.europa.eu/resource/authority/file-type/DBF,DBF +http://publications.europa.eu/resource/authority/file-type/ETSI_XML,ETSI_XML +http://publications.europa.eu/resource/authority/file-type/GEOJSON,GEOJSON +http://publications.europa.eu/resource/authority/file-type/GPKG,GPKG +http://publications.europa.eu/resource/authority/file-type/GPX,GPX +http://publications.europa.eu/resource/authority/file-type/GZIP,GZIP +http://publications.europa.eu/resource/authority/file-type/HTML,HTML +http://publications.europa.eu/resource/authority/file-type/ICS,ICS +http://publications.europa.eu/resource/authority/file-type/JPEG2000,JPEG2000 +http://publications.europa.eu/resource/authority/file-type/JSON,JSON +http://publications.europa.eu/resource/authority/file-type/JSON_LD,JSON_LD +http://publications.europa.eu/resource/authority/file-type/KML,KML +http://publications.europa.eu/resource/authority/file-type/KMZ,KMZ +http://publications.europa.eu/resource/authority/file-type/NETCDF,NETCDF +http://publications.europa.eu/resource/authority/file-type/ODS,ODS +http://publications.europa.eu/resource/authority/file-type/PNG,PNG +http://publications.europa.eu/resource/authority/file-type/RDF_N_QUADS,RDF_N_QUADS +http://publications.europa.eu/resource/authority/file-type/RDF_N_TRIPLES,RDF_N_TRIPLES +http://publications.europa.eu/resource/authority/file-type/RDF_TRIG,RDF_TRIG +http://publications.europa.eu/resource/authority/file-type/RDF_TURTLE,RDF_TURTLE +http://publications.europa.eu/resource/authority/file-type/RDF_XML,RDF_XML +http://publications.europa.eu/resource/authority/file-type/RSS,RSS +http://publications.europa.eu/resource/authority/file-type/RTF,RTF +http://publications.europa.eu/resource/authority/file-type/TAR,TAR +http://publications.europa.eu/resource/authority/file-type/TIFF,TIFF +http://publications.europa.eu/resource/authority/file-type/TSV,TSV +http://publications.europa.eu/resource/authority/file-type/TXT,TXT +http://publications.europa.eu/resource/authority/file-type/WMS_SRVC,WMS_SRVC +http://publications.europa.eu/resource/authority/file-type/XML,XML +http://publications.europa.eu/resource/authority/file-type/ZIP,ZIP diff --git a/ckanext/schemingdcat/codelists/dcat/rdf/download/access-right.csv.rdf b/ckanext/schemingdcat/codelists/dcat/rdf/download/access-right.csv.rdf new file mode 100644 index 0000000..660b385 --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/rdf/download/access-right.csv.rdf @@ -0,0 +1,34 @@ + + + + + SENSITIVE + + + + PUBLIC + + + + NON_PUBLIC + + + + RESTRICTED + + + + OP_DATPRO + + + + NORMAL + + + + CONFIDENTIAL + + diff --git a/ckanext/schemingdcat/codelists/dcat/rdf/download/file-types.csv.rdf b/ckanext/schemingdcat/codelists/dcat/rdf/download/file-types.csv.rdf new file mode 100644 index 0000000..5df5d7d --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/rdf/download/file-types.csv.rdf @@ -0,0 +1,1081 @@ + + + + + MBOX + + + + + XHTML + + + + + TAR + + + + + THRIFT_COMPACT + + + + + MOP + + + + + ARCINFO_COV + + + + + XLIFF + + + + + ETSI_TSL + + + + + DWCA + + + + + PDF1X + + + + + GPX + + + + + TMX + + + + + ARJ + + + + + MPEG4 + + + + + SB3 + + + + + RSS + + + + + APK + + + + + AKN4EU_ZIP + + + + + ODG + + + + + JSON + + + + + INDD + + + + + MIF_MID + + + + + MSI + + + + + ODP + + + + + DMG + + + + + EXE + + + + + TAR_GZ + + + + + AAC + + + + + STL + + + + + PSD + + + + + GRID_ASCII + + + + + N3 + + + + + RDF_N_TRIPLES + + + + + EAR + + + + + AKN4EU + + + + + GEOJSON + + + + + ATOM + + + + + XLSX + + + + + DTD_XML + + + + + ISO_ZIP + + + + + PDFA1B + + + + + SCHEMA_XML + + + + + PS + + + + + FMX2 + + + + + PNG + + + + + HDT + + + + + XHTML5 + + + + + RDF_TRIX + + + + + RDFA + + + + + PDF + + + + + SDMX + + + + + JATS + + + + + JSON_LD + + + + + EPS + + + + + MHTML + + + + + GML + + + + + EPUB + + + + + PDFX2A + + + + + LZO + + + + + XLSM + + + + + MDB + + + + + BMP + + + + + MATHML + + + + + RDF_THRIFT + + + + + ODF + + + + + FMX3 + + + + + WMTS_SRVC + + + + + AAB + + + + + GTFS + + + + + SPARQLQ + + + + + RAR + + + + + LHA + + + + + OCTET + + + + + OVF + + + + + TXT + + + + + ARC + + + + + ARC_GZ + + + + + Z + + + + + MPEG2 + + + + + THRIFT_JSON + + + + + JAR + + + + + DXF + + + + + BITS + + + + + IMMC_XML + + + + + MRSID + + + + + ZIP + + + + + APPX + + + + + PDFX + + + + + OP_DATPRO + + + + + WAR + + + + + GEOTIFF + + + + + ARROW_FILE + + + + + PDFA3 + + + + + TSV + + + + + WARC_GZ + + + + + CSV + + + + + WORLD + + + + + LEG + + + + + PARQUET + + + + + DAPK + + + + + XHTML_SIMPL + + + + + JPEG2000 + + + + + BWF + + + + + RTF + + + + + TIFF + + + + + DTD_SGML + + + + + MPEG4_AVC + + + + + PPT + + + + + LAS + + + + + BIN + + + + + THRIFT_BINARY + + + + + XYZ + + + + + XSLFO + + + + + MAP_SRVC + + + + + WMS_SRVC + + + + + HTML + + + + + XML + + + + + PPS + + + + + PDFA2B + + + + + DOCX + + + + + BZIP2 + + + + + TIFF_FX + + + + + RDF_N_QUADS + + + + + MARKDOWN + + + + + SVG + + + + + ECW + + + + + MOBI + + + + + PPSX + + + + + XLSB + + + + + LZIP + + + + + ODT + + + + + MAP_PRVW + + + + + WFS_SRVC + + + + + LZMA + + + + + WIM + + + + + GRID + + + + + GMZ + + + + + GIF + + + + + PDFUA + + + + + EFORMS_XML + + + + + ODC + + + + + YAML + + + + + METS_ZIP + + + + + JPEG + + + + + PDFX1A + + + + + WCS_SRVC + + + + + KML + + + + + KMZ + + + + + DCR + + + + + E00 + + + + + REST + + + + + XLS + + + + + RDF + + + + + UNGEN + + + + + LPK + + + + + PPTX + + + + + XZ + + + + + PDFX4 + + + + + NETCDF + + + + + WARC + + + + + SKOS_XML + + + + + HDF + + + + + ODB + + + + + SGML + + + + + TAR_XZ + + + + + SWM + + + + + PL + + + + + HTML_SIMPL + + + + + SHP + + + + + MXD + + + + + PWP + + + + + RDF_XML + + + + + FMX4_ZIP + + + + + GZIP + + + + + JS + + + + + ODS + + + + + TAB_RSTR + + + + + LAZ + + + + + OWL + + + + + AZW + + + + + DMP + + + + + MOV + + + + + TAB + + + + + DWG + + + + + RDF_TURTLE + + + + + METS + + + + + DEB + + + + + SQL + + + + + MSG_HTTP + + + + + WAV + + + + + CSS + + + + + RPM + + + + + GDB + + + + + ISO + + + + + ARROW_STREAM + + + + + RDF_TRIG + + + + + 7Z + + + + + GPKG + + + + + ETSI_XML + + + + + ICS + + + + + IPA + + + + + DBF + + + + + XSLT + + + + + FMX4 + + + + + MP3 + + + + + PDFA2A + + + + + LEGALHTML + + + + + WEBP + + + + + DOC + + + + + PDFA1A + + + + + QGS + + + + + HTML5 + + + + + SPARQLQRES + + + + + DGN + + + + + OAPK + + + diff --git a/ckanext/schemingdcat/codelists/dcat/rdf/download/licenses.csv.rdf b/ckanext/schemingdcat/codelists/dcat/rdf/download/licenses.csv.rdf new file mode 100644 index 0000000..5b683ef --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/rdf/download/licenses.csv.rdf @@ -0,0 +1,791 @@ + + + + + NLOD_2_0 + + + + + CC_BYNCND + + + + + RPL_1_5 + + + + + NAUMEN + + + + + OP_DATPRO + + + + + CC_BYNCSA_2_5 + + + + + NTP + + + + + CC_BY_3_0_NL + + + + + DLDE_BY_2_0 + DLDE_ZERO_2_0 + + + + + + EPL_2_0 + + + + + CC_BYNCND_1_0 + + + + + LILIQ_R_1_1 + + + + + NGPL + + + + + CPAL_1_0 + + + + + MPL_1_0 + + + + + CC_BYSA_2_5 + + + + + ODC_PDDL + + + + + CC_BY_3_0_AT + + + + + MOTOSOTO + + + + + CC_BYNC_2_0 + + + + + OGL_2_0 + + + + + CC0 + + + + + OGTSL + + + + + CNRI_PYTHON + + + + + BSL_1_0 + + + + + ECL_1_0 + + + + + OPL_2_1 + + + + + BSD_3_CLAUSE_LBNL + + + + + ECL_2_0 + + + + + CC_BY_1_0 + + + + + IODL_1_0 + + + + + ISA_OML + ISA_OML_1_1 + + + + + + APACHE_2_0 + + + + + EFL_1_0 + + + + + CC_BYNCSA + + + + + CC_BYND_2_0 + + + + + PSEUL + + + + + ZLIB + + + + + IPL_1_0 + + + + + QPL_1_0 + + + + + CC_BYNCND_4_0 + + + + + RPL_1_1 + + + + + LPL_1_02 + + + + + IODL_2_0 + + + + + HPND + + + + + OGL_3_0 + + + + + CC_BYND_1_0 + + + + + 0BSD + + + + + CC_BYSA_3_0_NL + + + + + ISC + + + + + CC_BY_3_0 + + + + + CC_BYSA_2_0 + + + + + SIMPL_2_0 + + + + + CC_BYNCSA_3_0 + + + + + UPL_1_0 + + + + + ODC_BY + + + + + UCL_1_0 + + + + + MS_RL + MIROS + + + + + + GPL_2_0 + + + + + NOKIA + + + + + EUROGEO_2022 + + + + + ETALAB_2_0 + + + + + DLDE_BY_1_0 + + + + + DLDE_BYNC_1_0 + + + + + LILIQ_P_1_1 + + + + + CECILL_2_1 + + + + + CC_BYNC_1_0 + + + + + NLOD_1_0 + + + + + ARTISTIC_1_0 + + + + + ARTISTIC_2_0 + + + + + ZPL_2_0 + + + + + SPL_1_0 + + + + + EUPL_1_0 + + + + + CC_BY_4_0 + + + + + GNU_FDL_1_3 + GNU_FDL + + + + + + LPPL_1_3C + + + + + CC_BYND_2_5 + + + + + CC_BYSA_4_0 + + + + + EU_DATAGRID + + + + + CC_BY_2_0 + + + + + POSTGRE_SQL + + + + + CC_BY + + + + + APSL_2_0 + + + + + OSL_1_0 + + + + + OGL_NC + + + + + VSL_1_0 + + + + + CC_BYSA + + + + + CPL_1_0 + + + + + CC_BYNCND_2_5 + + + + + CC_PDM_1_0 + + + + + OSL_2_1 + + + + + GNU_FDL_1_1 + + + + + CC_BYNC + + + + + APACHE_1_1 + + + + + BSD_PLUS_PATENT + + + + + EPL_1_0 + + + + + ECOS_2_0 + + + + + RSCPL + + + + + CLARIN_ACA_1_0 + + + + + PYTHON_2_0 + + + + + OGL_1_0 + + + + + FAIR + + + + + MIT + + + + + NASA_1_3 + + + + + CC_BY_2_5 + + + + + CC_BYND + + + + + WXWINDOWS + + + + + APL_1_0 + + + + + CC_BYNCSA_2_0 + + + + + AGPL_3_0 + + + + + NCSA + + + + + FRAMEWORX_1_0 + + + + + OGL_ROU_1_0 + + + + + OFL_1_1 + + + + + CC_BYNCND_3_0 + + + + + CC_BYSA_3_0 + + + + + RPSL_1_0 + + + + + BSD_2_CLAUSE + + + + + CC_BYNCSA_1_0 + + + + + CC_BYNC_4_0 + + + + + GNU_FDL_1_2 + + + + + GPL_3_0 + + + + + CATOSL_1_1 + + + + + LGPL_2_1 + + + + + LPL_1_0 + + + + + IPA + + + + + OCLC_2_0 + + + + + MPL_1_1 + + + + + MS_PL + + + + + EFL_2 + + + + + ENTESSA + + + + + CC_BYNCSA_4_0 + + + + + CC_BYSA_1_0 + + + + + CDDL_1_0 + + + + + CC_BYNC_2_5 + + + + + LILIQ_RPLUS_1_1 + + + + + NPOSL_3_0 + + + + + BSD_3_CLAUSE + + + + + SLEEPYCAT + + + + + COM_REUSE + + + + + W3C + + + + + CC_BYND_4_0 + + + + + CC_BYNC_3_0 + + + + + MPL_2_0 + + + + + HROD + + + + + OSL_3_0 + + + + + EUPL_1_1 + EUPL_1_2 + + + + + + CC_BYND_3_0 + + + + + ODC_BL + + + + + LGPL_3_0 + + + + + WATCOM_1_0 + + + + + PHP_3_0 + + + + + MULTICS + + + + + CC_BYNCND_2_0 + + + + + XNET + + + diff --git a/ckanext/schemingdcat/codelists/dcat/rdf/download/media-types.csv.rdf b/ckanext/schemingdcat/codelists/dcat/rdf/download/media-types.csv.rdf new file mode 100644 index 0000000..363761e --- /dev/null +++ b/ckanext/schemingdcat/codelists/dcat/rdf/download/media-types.csv.rdf @@ -0,0 +1,8446 @@ + + + + + application/vnd.yamaha.smaf-phrase + + + + application/vnd.evolv.ecig.profile + + + + application/vnd.oma.xcap-directory+xml + + + + video/matroska-3d + + + + application/vnd.geo+json + + + + application/x-www-form-urlencoded + + + + application/vnd.sealed.net + + + + application/vnd.sealed.ppt + + + + audio/TETRA_ACELP_BB + + + + application/http + + + + application/vnd.informix-visionary + + + + application/alto-tips+json + + + + application/vnd.llamagraphics.life-balance.exchange+xml + + + + model/vnd.moml+xml + + + + application/jwt + + + + application/vnd.mitsubishi.misty-guard.trustweb + + + + application/dca-rft + + + + application/vnd.3gpp.sms+xml + + + + application/vnd.vividence.scriptfile + + + + audio/G729 + + + + application/vnd.apexlang + + + + application/vnd.cab-jscript + + + + application/vnd.ms-officetheme + + + + image/vnd.dxf + + + + application/vnd.nokia.n-gage.ac+xml + + + + application/vnd.smart.notebook + + + + video/vnd.dece.sd + + + + application/vnd.geoplan + + + + application/EmergencyCallData.LegacyESN+json + + + + application/vnd.mozilla.xul+xml + + + + text/tab-separated-values + + + + application/vnd.immervision-ivp + + + + application/mbms-protection-description+xml + + + + application/vnd.3gpp.pfcp + + + + video/vnd.iptvforum.ttsavc + + + + audio/EVRC0 + + + + video/vnd.dece.mobile + + + + application/vnd.tao.intent-module-archive + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml + + + + application/mxf + + + + application/p21 + + + + application/nlsml+xml + + + + application/vnd.3gpp.mcptt-service-config+xml + + + + model/x3d+xml + + + + audio/L16 + + + + application/lostsync+xml + + + + application/vnd.wolfram.mathematica + + + + application/vnd.geogebra.slides + + + + audio/G728 + + + + application/widget + + + + application/vnd.frogans.ltf + + + + application/prs.hpub+zip + + + + audio/EVRCWB0 + + + + application/vnd.ms-playready.initiator+xml + + + + application/vnd.Kinar + + + + application/vnd.gentoo.xpak + + + + video/vnd.dvb.file + + + + video/H263-2000 + + + + application/gnap-binding-jwsd + + + + application/tamp-status-response + + + + application/tamp-update + + + + video/mpeg4-generic + + + + text/vnd.fmi.flexstor + + + + application/vnd.oipf.ueprofile+xml + + + + application/prs.implied-object+json-seq + + + + application/vnd.oma.poc.final-report+xml + + + + application/vnd.uplanet.alert-wbxml + + + + audio/vnd.rhetorex.32kadpcm + + + + application/vnd.nokia.conml+wbxml + + + + application/vnd.openxmlformats-officedocument.presentationml.slide+xml + + + + image/g3fax + + + + text/mizar + + + + application/mathematica + + + + text/rtx + + + + application/vnd.ecowin.filerequest + + + + application/prs.nprend + + + + application/pem-certificate-chain + + + + application/DCD + + + + application/vnd.ms-windows.devicepairing + + + + application/vnd.triscape.mxs + + + + application/rfc+xml + + + + application/kpml-request+xml + + + + application/vnd.gov.sk.xmldatacontainer+xml + + + + application/vnd.radisys.msml-dialog-fax-sendrecv+xml + + + + application/vnd.Mobius.MBK + + + + application/soap+fastinfoset + + + + application/vnd.ms-project + + + + application/tamp-apex-update-confirm + + + + application/vnd.las.las+xml + + + + application/yaml + + + + application/vnd.patientecommsdoc + + + + application/vnd.fujitsu.oasys2 + + + + application/vnd.mdl + + + + application/vnd.3gpp.gtpc + + + + image/vnd.net-fpx + + + + application/vnd.shade-save-file + + + + application/vnd.powerbuilder7 + + + + application/vnd.ms-powerpoint.presentation.macroEnabled.12 + + + + application/opc-nodeset+xml + + + + application/vnd.shp + + + + application/vnd.ms-powerpoint.template.macroEnabled.12 + + + + application/reputon+json + + + + application/token-introspection+jwt + + + + application/vnd.oasis.opendocument.database + + + + application/vnd.infotech.project+xml + + + + application/vnd.ecowin.seriesupdate + + + + application/EmergencyCallData.cap+xml + + + + application/sarif+json + + + + audio/mobile-xmf + + + + application/vnd.trid.tpt + + + + application/vnd.xara + + + + application/vnd.radisys.msml-audit+xml + + + + application/A2L + + + + application/vnd.openblox.game-binary + + + + application/vnd.avalon+json + + + + text/prs.lines.tag + + + + video/vnd.sealed.mpeg1 + + + + multipart/voice-message + + + + application/vnd.dolby.mobile.1 + + + + text/vnd.in3d.3dml + + + + application/vnd.oma.bcast.simple-symbol-container + + + + application/sep-exi + + + + audio/MELP1200 + + + + application/vnd.onvif.metadata + + + + application/vnd.svd + + + + video/encaprtp + + + + application/vnd.dvb.dvbj + + + + application/vnd.openxmlformats-officedocument.presentationml.template + + + + application/vnd.criticaltools.wbs+xml + + + + application/vnd.oipf.contentaccessdownload+xml + + + + application/vnd.3gpp2.sms + + + + text/vnd.radisys.msml-basic-layout + + + + application/linkset+json + + + + video/MP2T + + + + application/vnd.3gpp.GMOP+xml + + + + application/xmpp+xml + + + + application/vnd.ipld.dag-cbor + + + + application/vp + + + + application/vnd.patentdive + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml + + + + application/vnd.wordperfect + + + + application/rpki-signed-tal + + + + application/senml+json + + + + application/mbms-deregister+xml + + + + application/private-token-request + + + + text/prs.prop.logic + + + + image/vnd.wap.wbmp + + + + application/timestamp-query + + + + audio/PCMU + + + + application/vnd.adobe.partial-upload + + + + application/yang-sid+json + + + + application/vnd.sailingtracker.track + + + + application/xcap-caps+xml + + + + application/link-format + + + + audio/EVRCNW1 + + + + application/x-pki-message + + + + application/p21+zip + + + + audio/VDVI + + + + application/CEA + + + + application/vc + + + + audio/vnd.dolby.pl2z + + + + application/CALS-1840 + + + + video/BMPEG + + + + application/taxii+json + + + + application/vnd.3gpp.mcvideo-user-profile+xml + + + + application/cwl+json + + + + application/vnd.oasis.opendocument.text-template + + + + application/vnd.d3m-dataset + + + + application/vnd.xfdl + + + + application/vnd.cups-pdf + + + + application/coap-group+json + + + + application/automationml-amlx+zip + + + + audio/L24 + + + + text/vnd.esmertec.theme-descriptor + + + + application/vnd.3gpp.bsf+xml + + + + application/vnd.FloGraphIt + + + + audio/encaprtp + + + + application/vnd.sqlite3 + + + + video/vnd.dlna.mpeg-tts + + + + application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml + + + + application/tei+xml + + + + audio/PCMA-WB + + + + application/media_control+xml + + + + image/vnd.tencent.tap + + + + application/vnd.xacml+json + + + + application/pkcs8 + + + + application/dicom+json + + + + application/sipc + + + + application/vnd.ntt-local.file-transfer + + + + application/vnd.dynageo + + + + model/x3d-vrml + + + + application/vnd.wap.wbxml + + + + audio/G729D + + + + application/xop+xml + + + + application/vnd.ipld.dag-json + + + + application/vnd.uplanet.cacheop + + + + message/ohttp-res + + + + application/private-token-response + + + + application/vnd.ciedi + + + + application/vnd.software602.filler.form-xml-zip + + + + application/im-iscomposing+xml + + + + text/provenance-notation + + + + application/vnd.radisys.msml-audit-conf+xml + + + + audio/3gpp + + + + application/vnd.belightsoft.lhzd+zip + + + + application/vnd.mcd + + + + application/yin+xml + + + + application/vnd.iptc.g2.newsmessage+xml + + + + text/vnd.hgl + + + + application/vnd.iptc.g2.catalogitem+xml + + + + application/andrew-inset + + + + application/vnd.geocube+xml + + + + application/vnd.dvb.notif-ia-msglist+xml + + + + application/set-registration + + + + application/vnd.vel+json + + + + application/vnd.medcalcdata + + + + application/geo+json + + + + application/at+jwt + + + + application/vnd.autopackage + + + + application/poc-settings+xml + + + + application/vnd.data-vision.rdz + + + + audio/EVRCWB + + + + application/vnd.accpac.simply.aso + + + + text/vnd.vcf + + + + application/vnd.s3sms + + + + application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml + + + + application/vnd.lotus-organizer + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml + + + + audio/vnd.cmles.radio-events + + + + application/vnd.sealedmedia.softseal.pdf + + + + application/vnd.claymore + + + + application/scvp-cv-request + + + + application/vnd.rar + + + + application/passport + + + + image/vnd.microsoft.icon + + + + application/vnd.multiad.creator + + + + application/vnd.3gpp.mcvideo-regroup+xml + + + + application/vnd.hp-PCL + + + + application/wita + + + + application/wasm + + + + application/xfdf + + + + audio/BV32 + + + + application/patch-ops-error+xml + + + + application/vnd.apache.thrift.binary + + + + application/vnd.f-secure.mobile + + + + application/vnd.aether.imp + + + + model/vnd.gdl + + + + model/mtl + + + + model/vnd.vtu + + + + application/kpml-response+xml + + + + application/vnd.pawaafile + + + + application/vnd.collabio.xodocuments.spreadsheet + + + + application/vnd.isac.fcs + + + + text/vnd.sun.j2me.app-descriptor + + + + application/vnd.3gpp.mc-signalling-ear + + + + application/vnd.obn + + + + application/vnd.street-stream + + + + application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml + + + + application/vnd.ms-word.document.macroEnabled.12 + + + + application/linkset + + + + text/cache-manifest + + + + application/vnd.ibm.rights-management + + + + application/vnd.cryptomator.encrypted + + + + application/vnd.apple.installer+xml + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml + + + + application/xml + + + + application/mbms-register-response+xml + + + + application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml + + + + image/vnd.valve.source.texture + + + + video/vnd.sealed.swf + + + + application/relax-ng-compact-syntax + + + + application/vnd.afpc.afplinedata-pagedef + + + + application/vnd.japannet-verification-wakeup + + + + application/vnd.efi.img + + + + application/vnd.coreos.ignition+json + + + + application/fhir+json + + + + image/heic + + + + application/vnd.omads-file+xml + + + + application/mathml-content+xml + + + + application/vnd.ibm.MiniPay + + + + haptics/hmpg + + + + application/vnd.nokia.conml+xml + + + + application/vnd.ms-asf + + + + application/cose-key + + + + application/rdf+xml + + + + video/rtploopback + + + + application/vnd.oma.scidm.messages+xml + + + + application/vnd.radisys.moml+xml + + + + application/timestamped-data + + + + application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml + + + + application/vnd.syncml.dmddf+xml + + + + application/vnd.ms-lrm + + + + application/vnd.kde.kword + + + + application/vnd.comicbook+zip + + + + application/vnd.acucobol + + + + audio/vnd.dts + + + + application/prs.plucker + + + + application/vnd.cups-postscript + + + + application/vnd.nacamar.ybrid+json + + + + application/vnd.3gpp.mcvideo-mbms-usage-info+xml + + + + image/jxrA + + + + application/yang-data+json + + + + application/vnd.fujixerox.docuworks.binder + + + + video/vnd.vivo + + + + image/vnd.adobe.photoshop + + + + image/dicom-rle + + + + application/edhoc+cbor-seq + + + + application/xcap-error+xml + + + + application/vnd.afpc.modca + + + + application/vnd.dpgraph + + + + application/smil+xml + + + + application/vnd.onepagertamp + + + + application/vnd.wfa.p2p + + + + application/vnd.grafeq + + + + application/vnd.orange.indata + + + + application/vnd.ms-PrintDeviceCapabilities+xml + + + + application/vnd.noblenet-web + + + + text/parityfec + + + + application/vnd.c3voc.schedule+xml + + + + message/delivery-status + + + + application/vnd.3gpp.mcdata-ue-config+xml + + + + video/rtp-enc-aescm128 + + + + model/vnd.cld + + + + application/vnd.dir-bi.plate-dl-nosuffix + + + + text/vnd.wap.wml + + + + application/vnd.omads-folder+xml + + + + application/prs.cyn + + + + font/otf + + + + application/cwt + + + + message/bhttp + + + + application/vnd.debian.binary-package + + + + application/vnd.3gpp.mcvideo-ue-config+xml + + + + model/vnd.usdz+zip + + + + application/dots+cbor + + + + application/vnd.ms-excel.template.macroEnabled.12 + + + + application/vnd.etsi.sci+xml + + + + application/CSTAdata+xml + + + + video/vnd.iptvforum.ttsmpeg2 + + + + application/ATXML + + + + application/font-woff + + + + text/vnd.fly + + + + model/x3d+fastinfoset + + + + application/vnd.oma.bcast.associated-procedure-parameter+xml + + + + application/mediaservercontrol+xml + + + + application/vnd.dart + + + + audio/EVRC-QCP + + + + application/vnd.commonspace + + + + application/vnd.otps.ct-kip+xml + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml + + + + application/urc-grpsheet+xml + + + + text/vnd.IPTC.NITF + + + + audio/vnd.digital-winds + + + + image/ktx + + + + application/vnd.smintio.portals.archive + + + + model/stl + + + + application/ace-groupcomm+cbor + + + + text/vcard + + + + application/vnd.antix.game-component + + + + application/csrattrs + + + + multipart/multilingual + + + + application/vnd.oipf.spdiscovery+xml + + + + application/load-control+xml + + + + application/bufr + + + + application/vnd.openeye.oeb + + + + multipart/x-mixed-replace + + + + application/geoxacml+json + + + + application/vnd.bbf.usp.error + + + + application/vnd.yamaha.tunnel-udpencap + + + + application/problem+json + + + + application/vnd.oma.bcast.sgdu + + + + application/pdf + + + + application/vnd.kde.kpresenter + + + + application/vnd.gmx + + + + application/vnd.dna + + + + application/vnd.oasis.opendocument.spreadsheet-template + + + + message/tracking-status + + + + application/vnd.nokia.ncd + + + + application/vnd.openxmlformats-officedocument.theme+xml + + + + application/alto-directory+json + + + + image/vnd.zbrush.pcx + + + + text/prs.texi + + + + application/vnd.oma.push + + + + application/vnd.3gpp.mcvideo-location-info+xml + + + + audio/vnd.lucent.voice + + + + application/vnd.informedcontrol.rms+xml + + + + application/yang-data+xml + + + + application/scim+json + + + + application/vnd.openxmlformats-package.core-properties+xml + + + + application/EmergencyCallData.ProviderInfo+xml + + + + application/vnd.ims.lti.v2.toolsettings.simple+json + + + + application/vnd.vcx + + + + application/vnd.uplanet.channel-wbxml + + + + application/ecmascript + + + + text/dns + + + + application/vnd.mason+json + + + + application/vnd.oasis.opendocument.image + + + + application/vnd.oma.bcast.smartcard-trigger+xml + + + + application/vnd.fujixerox.ART-EX + + + + image/fits + + + + application/vnd.pvi.ptid1 + + + + application/whoispp-response + + + + application/vnd.seis+json + + + + application/vnd.software602.filler.form+xml + + + + image/vnd.fst + + + + application/vnd.3gpp.srvcc-ext+xml + + + + application/vnd.sema + + + + application/vnd.efi.iso + + + + application/ODX + + + + application/oebps-package+xml + + + + audio/vnd.dlna.adts + + + + application/vnd.ipld.raw + + + + audio/MELP2400 + + + + application/vnd.xfdl.webform + + + + application/vnd.fdsn.seed + + + + application/vnd.3gpp-prose-pc3ach+xml + + + + video/vnd.nokia.mp4vr + + + + audio/vnd.cns.inf1 + + + + video/matroska + + + + application/vnd.3gpp.pic-bw-small + + + + text/csv-schema + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml + + + + application/pls+xml + + + + application/vnd.ieee.1905 + + + + haptics/hjif + + + + application/vnd.openxmlformats-officedocument.customXmlProperties+xml + + + + application/vnd.3gpp-prose-pc3ch+xml + + + + audio/MP4A-LATM + + + + application/vnd.iccprofile + + + + video/VP9 + + + + application/vnd.iptc.g2.planningitem+xml + + + + application/auth-policy+xml + + + + application/ocsp-response + + + + application/csvm+json + + + + application/vnd.openxmlformats-officedocument.custom-properties+xml + + + + image/jls + + + + model/JT + + + + application/vnd.ms-wmdrm.lic-resp + + + + model/step+xml + + + + application/xslt+xml + + + + audio/ulpfec + + + + application/vnd.muvee.style + + + + image/wmf + + + + application/vnd.oma.cab-pcc+xml + + + + audio/G726-32 + + + + application/vnd.iptc.g2.newsitem+xml + + + + application/vnd.etsi.iptvueprofile+xml + + + + application/EmergencyCallData.Control+xml + + + + application/vnd.etsi.iptvprofile+xml + + + + application/sdp + + + + application/vnd.wfa.dpp + + + + text/vnd.debian.copyright + + + + application/vnd.ffsns + + + + application/vnd.canon-cpdl + + + + application/mods+xml + + + + application/H224 + + + + application/vnd.groove-vcard + + + + application/vnd.eprints.data+xml + + + + application/vnd.ms-cab-compressed + + + + application/vnd.etsi.tsl.der + + + + application/vnd.oma.cab-feature-handler+xml + + + + application/vnd.uri-map + + + + application/whoispp-query + + + + application/vnd.dvb.notif-container+xml + + + + text/vnd.latex-z + + + + audio/DAT12 + + + + multipart/byteranges + + + + application/vnd.dzr + + + + application/vnd.dvb.ipdcesgaccess + + + + application/vnd.marlin.drm.actiontoken+xml + + + + application/alto-endpointpropparams+json + + + + audio/raptorfec + + + + application/gnap-binding-rotation-jwsd + + + + application/oauth-authz-req+jwt + + + + text/parameters + + + + application/vnd.3gpp.mcdata-payload + + + + application/atsc-held+xml + + + + application/vnd.tml + + + + application/vnd.3gpp.mcdata-info+xml + + + + application/EDIFACT + + + + application/nasdata + + + + application/ocsp-request + + + + text/SGML + + + + application/vnd.dvb.ipdcdftnotifaccess + + + + application/vnd.oma.poc.optimized-progress-report+xml + + + + application/vnd.framemaker + + + + video/H264-RCDO + + + + application/dns + + + + application/vnd.yaoweme + + + + application/mpeg4-iod + + + + application/vnd.groove-injector + + + + application/route-usd+xml + + + + application/vnd.qualcomm.brew-app-res + + + + application/vnd.geonext + + + + application/vnd.dvb.notif-aggregate-root+xml + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.template + + + + application/vnd.motorola.flexsuite.wem + + + + application/vnd.ms-word.template.macroEnabled.12 + + + + application/pkix-pkipath + + + + application/vnd.ipunplugged.rcprofile + + + + audio/speex + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml + + + + application/vnd.crick.clicker.palette + + + + application/x-x509-ca-cert + + + + audio/dsr-es202050 + + + + application/vnd.gentoo.pkgmetadata+xml + + + + application/alto-propmapparams+json + + + + application/vnd.verimatrix.vcas + + + + application/missing-blocks+cbor-seq + + + + application/prs.xsf+xml + + + + application/AML + + + + application/vnd.ms-excel.sheet.binary.macroEnabled.12 + + + + application/index.cmd + + + + application/rpki-manifest + + + + application/vnd.3gpp.state-and-event-info+xml + + + + application/vnd.xmpie.xlim + + + + application/vnd.fujixerox.HBPL + + + + application/mbms-reception-report+xml + + + + application/vnd.d2l.coursepackage1p0+zip + + + + video/vnd.iptvforum.2dparityfec-2005 + + + + application/msc-ivr+xml + + + + application/vnd.openxmlformats-officedocument.presentationml.comments+xml + + + + application/shf+xml + + + + text/shex + + + + application/media-policy-dataset+xml + + + + application/mbox + + + + application/vnd.onepagertamx + + + + application/vnd.nintendo.nitro.rom + + + + application/sensml-exi + + + + application/zlib + + + + image/vnd.sealedmedia.softseal.gif + + + + application/stix+json + + + + model/vnd.pytha.pyox + + + + video/H263 + + + + audio/EVRCB + + + + application/vnd.api+json + + + + application/manifest+json + + + + application/vnd.openxmlformats-officedocument.vmlDrawing + + + + application/vnd.logipipe.circuit+zip + + + + application/vnd.dolby.mobile.2 + + + + application/vnd.modl + + + + application/vnd.poc.group-advertisement+xml + + + + application/mathml+xml + + + + application/vnd.fdsn.mseed + + + + application/vnd.oma-scws-config + + + + application/vnd.omaloc-supl-init + + + + application/tm+json + + + + application/vnd.ncd.reference + + + + application/vnd.cluetrust.cartomobile-config + + + + application/vnd.iptc.g2.packageitem+xml + + + + video/FFV1 + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml + + + + application/vnd.spotfire.sfs + + + + application/vnd.3gpp.mcptt-info+xml + + + + message/mls + + + + application/vnd.oasis.opendocument.text + + + + audio/G711-0 + + + + application/vnd.nervana + + + + application/ppsp-tracker+json + + + + application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml + + + + application/epp+xml + + + + audio/ATRAC-X + + + + application/vnd.gnu.taler.exchange+json + + + + application/vnd.kidspiration + + + + application/vnd.rig.cryptonote + + + + application/vnd.openxmlformats-package.relationships+xml + + + + application/cfw + + + + application/vnd.ms-wmdrm.lic-chlg-req + + + + text/vnd.wap.wmlscript + + + + application/vnd.cups-raster + + + + application/vnd.miele+json + + + + application/vnd.tmd.mediaflex.api+xml + + + + application/atomicmail + + + + application/vnd.ms-excel.sheet.macroEnabled.12 + + + + application/sparql-results+xml + + + + video/MP1S + + + + application/vnd.bluetooth.ep.oob + + + + audio/VMR-WB + + + + application/ipp + + + + application/1d-interleaved-parityfec + + + + video/ulpfec + + + + text/vnd.IPTC.NewsML + + + + application/bacnet-xdd+zip + + + + application/vnd.openblox.game+xml + + + + application/vnd.bbf.usp.msg+json + + + + application/vnd.recordare.musicxml + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.document + + + + video/mj2 + + + + application/tamp-status-query + + + + application/vnd.cryptomator.vault + + + + application/vnd.sus-calendar + + + + audio/tone + + + + application/vnd.HandHeld-Entertainment+xml + + + + application/vnd.wmc + + + + application/moss-signature + + + + application/vnd.microsoft.windows.thumbnail-cache + + + + application/vnd.oma.cab-address-book+xml + + + + application/dns+json + + + + application/vnd.hcl-bireports + + + + application/vnd.apache.thrift.json + + + + audio/rtp-enc-aescm128 + + + + application/vnd.hyperdrive+json + + + + application/vnd.dvb.notif-generic+xml + + + + application/vnd.intertrust.nncp + + + + application/vnd.motorola.flexsuite.ttc + + + + application/scvp-vp-request + + + + application/scvp-vp-response + + + + application/vnd.syncml.dm+wbxml + + + + application/vnd.byu.uapi+json + + + + application/vnd.3gpp.seal-location-info+xml + + + + audio/EVRC + + + + video/SMPTE292M + + + + application/vnd.etsi.iptvcommand+xml + + + + application/vnd.chipnuts.karaoke-mmd + + + + application/webpush-options+json + + + + application/vnd.dece.unspecified + + + + application/vnd.doremir.scorecloud-binary-document + + + + application/vnd.ibm.secure-container + + + + audio/vnd.nuera.ecelp4800 + + + + application/watcherinfo+xml + + + + application/EmergencyCallData.VEDS+xml + + + + text/rtp-enc-aescm128 + + + + text/vnd.wap.sl + + + + application/vnd.frogans.fnc + + + + application/vnd.wv.ssp+xml + + + + text/rtf + + + + application/emotionml+xml + + + + audio/vnd.dolby.mps + + + + application/vnd.3gpp.mid-call+xml + + + + application/vnd.hsl + + + + application/vnd.3M.Post-it-Notes + + + + application/rpki-publication + + + + model/iges + + + + application/mets+xml + + + + application/font-tdpfr + + + + application/vnd.oma.bcast.sgboot + + + + application/jwk-set+json + + + + application/vnd.vectorworks + + + + application/alto-propmap+json + + + + application/vnd.uplanet.list + + + + application/vnd.kodak-descriptor + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml + + + + application/vnd.3lightssoftware.imagescal + + + + application/ccmp+xml + + + + application/vnd.quobject-quoxdocument + + + + application/vnd.piaccess.application-licence + + + + application/prs.alvestrand.titrax-sheet + + + + application/cbor-seq + + + + application/vnd.banana-accounting + + + + application/vnd.1ob + + + + application/vnd.wap.sic + + + + application/vnd.solent.sdkm+xml + + + + application/vnd.openxmlformats-officedocument.presentationml.presProps+xml + + + + application/vnd.etsi.timestamp-token + + + + application/vnd.android.ota + + + + application/dpop+jwt + + + + application/vnd.las.las+json + + + + application/prs.implied-structure + + + + application/vnd.etsi.asic-s+zip + + + + application/vnd.wolfram.player + + + + application/vnd.tableschema+json + + + + application/alto-endpointprop+json + + + + text/prs.fallenstein.rst + + + + application/vnd.globalplatform.card-content-mgt-response + + + + application/mikey + + + + application/problem+xml + + + + application/vnd.datalog + + + + application/vnd.etsi.pstn+xml + + + + application/vnd.hhe.lesson-player + + + + application/vnd.uplanet.listcmd-wbxml + + + + application/vnd.innopath.wamp.notification + + + + application/vnd.radisys.msml-audit-stream+xml + + + + application/alto-endpointcostparams+json + + + + multipart/related + + + + application/vnd.dxr + + + + application/vnd.geogebra.file + + + + application/vnd.dece.data + + + + video/JPEG + + + + application/vnd.crick.clicker.template + + + + application/lgr+xml + + + + image/j2c + + + + application/vnd.3gpp.mcptt-ue-config+xml + + + + image/jpm + + + + application/cid-edhoc+cbor-seq + + + + application/mrb-publish+xml + + + + video/H264-SVC + + + + application/pkcs10 + + + + application/vnd.collabio.xodocuments.presentation-template + + + + application/vnd.chess-pgn + + + + application/index + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml + + + + application/pkixcmp + + + + application/vnd.oma-scws-http-request + + + + application/vnd.syncml.dmtnds+xml + + + + application/postscript + + + + application/vnd.sealedmedia.softseal.html + + + + application/vnd.shana.informed.formtemplate + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml + + + + application/ulpfec + + + + application/vnd.afpc.cmoca-cmresource + + + + application/vnd.picsel + + + + text/vnd.zoo.kcl + + + + application/emma+xml + + + + application/vnd.oai.workflows + + + + application/vnd.datapackage+json + + + + audio/AMR + + + + image/t38 + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml + + + + application/vnd.apache.thrift.compact + + + + application/vnd.crick.clicker.keyboard + + + + video/parityfec + + + + text/encaprtp + + + + application/vnd.iptc.g2.knowledgeitem+xml + + + + application/vnd.jcp.javame.midlet-rms + + + + application/vnd.fujifilm.fb.docuworks.binder + + + + application/vnd.bluetooth.le.oob + + + + application/vnd.wfa.wsc + + + + audio/t38 + + + + application/vnd.3gpp.SRVCC-info+xml + + + + application/vnd.ims.lti.v2.toolconsumerprofile+json + + + + application/vnd.amiga.ami + + + + audio/CN + + + + text/markdown + + + + application/gml+xml + + + + application/vnd.3gpp.mcptt-affiliation-command+xml + + + + application/vnd.oma.bcast.notification+xml + + + + application/vnd.adobe.formscentral.fcdt + + + + audio/basic + + + + application/tamp-community-update-confirm + + + + application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml + + + + application/vnd.3gpp2.bcmcsinfo+xml + + + + application/vnd.eu.kasparian.car+json + + + + application/vnd.mermaid + + + + message/disposition-notification + + + + application/vnd.collection+json + + + + application/vnd.3gpp-prose-pc3a+xml + + + + application/ttml+xml + + + + application/xcon-conference-info-diff+xml + + + + application/vnd.hp-HPGL + + + + video/vnd.directv.mpeg + + + + application/vnd.oma.dd2+xml + + + + application/vnd.windows.devicepairing + + + + application/sru+xml + + + + application/dns-message + + + + application/vnd.Mobius.MSL + + + + application/tamp-community-update + + + + application/vnd.anser-web-certificate-issue-initiation + + + + application/xml-external-parsed-entity + + + + audio/aac + + + + application/jsonpath + + + + application/flexfec + + + + model/step+zip + + + + application/vnd.sealed.eml + + + + application/vnd.ibm.afplinedata + + + + application/vnd.smaf + + + + application/vnd.psfs + + + + application/vnd.syncml.dmtnds+wbxml + + + + application/resource-lists+xml + + + + application/efi + + + + application/vnd.exstream-package + + + + application/vnd.ecowin.chart + + + + application/vnd.lotus-screencam + + + + application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml + + + + audio/telephone-event + + + + application/vnd.uplanet.bearer-choice-wbxml + + + + application/vnd.olpc-sugar + + + + application/vnd.cybank + + + + audio/aptx + + + + application/vnd.oasis.opendocument.text-master-template + + + + application/vnd.evolv.ecig.settings + + + + application/vnd.oasis.opendocument.graphics-template + + + + video/vnd.youtube.yt + + + + application/vnd.oipf.userprofile+xml + + + + application/vnd.apothekende.reservation+json + + + + video/MP2P + + + + application/vnd.hdt + + + + application/vnd.3gpp.pinapp-info+xml + + + + application/vnd.novadigm.EDX + + + + application/ibe-pp-data + + + + application/vnd.preminet + + + + application/vnd.ms-excel + + + + application/vnd.groove-account + + + + model/gltf-binary + + + + image/vnd.svf + + + + audio/G729E + + + + application/vnd.spotfire.dxp + + + + video/pointer + + + + application/vnd.futoin+cbor + + + + video/H265 + + + + application/vnd.openxmlformats-officedocument.presentationml.tags+xml + + + + application/vnd.mediastation.cdkey + + + + application/vnd.mynfc + + + + message/vnd.wfa.wsc + + + + application/alto-networkmapfilter+json + + + + application/vnd.futoin+json + + + + application/vnd.etsi.iptvsad-cod+xml + + + + application/vnd.nato.openxmlformats-package.iepd+zip + + + + application/rlmi+xml + + + + video/vnd.sealedmedia.softseal.mov + + + + application/vnd.espass-espass+zip + + + + audio/RED + + + + audio/ATRAC-ADVANCED-LOSSLESS + + + + text/t140 + + + + application/vnd.ms-windows.nwprinting.oob + + + + application/rtploopback + + + + application/prs.cww + + + + application/vnd.syncml.dm+xml + + + + application/vnd.etsi.iptvsad-npvr+xml + + + + audio/vnd.cisco.nse + + + + application/vnd.visionary + + + + video/VP8 + + + + application/vnd.bbf.usp.msg + + + + image/vnd.fastbidsheet + + + + image/jpx + + + + application/nss + + + + application/vnd.avistar+xml + + + + application/calendar+json + + + + application/oscore + + + + font/sfnt + + + + application/srgs+xml + + + + video/vnd.mpegurl + + + + application/vnd.mophun.application + + + + application/vnd.eclipse.ditto+json + + + + application/marcxml+xml + + + + application/cose-x509 + + + + application/ace+json + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml + + + + application/TETRA_ISI + + + + application/vnd.quarantainenet + + + + application/vnd.ves.encrypted + + + + application/alto-error+json + + + + application/vnd.syncml+xml + + + + application/vnd.dtg.local + + + + video/vnd.radgamettools.smacker + + + + application/vnd.loom + + + + application/vnd.kde.kontour + + + + video/vnd.objectvideo + + + + application/vnd.fujixerox.ART4 + + + + video/MPV + + + + application/vnd.palm + + + + application/cose-key-set + + + + text/turtle + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml + + + + image/vnd.dwg + + + + image/cgm + + + + application/vnd.immervision-ivu + + + + text/vnd.net2phone.commcenter.command + + + + application/vnd.afpc.foca-codedfont + + + + application/vnd.ms-tnef + + + + application/vnd.osa.netdeploy + + + + application/vnd.easykaraoke.cdgdownload + + + + application/jose+json + + + + application/ISUP + + + + application/vnd.accpac.simply.imp + + + + image/pwg-raster + + + + image/vnd.ms-modi + + + + application/c2pa + + + + application/mrb-consumer+xml + + + + text/RED + + + + haptics/ivs + + + + application/LXF + + + + application/vnd.ntt-local.content-share + + + + application/vnd.motorola.flexsuite.kmr + + + + audio/vnd.4SB + + + + image/tiff-fx + + + + application/vnd.d3m-problem + + + + application/vnd.afpc.foca-codepage + + + + application/vnd.wrq-hp3000-labelled + + + + application/vnd.ms-powerpoint.slide.macroEnabled.12 + + + + application/vnd.tcpdump.pcap + + + + image/jxrS + + + + application/vnd.onepager + + + + text/vnd.ms-mediapackage + + + + audio/vnd.dolby.heaac.1 + + + + multipart/example + + + + application/mbms-associated-procedure-description+xml + + + + application/vnd.exstream-empower+zip + + + + application/vnd.radisys.msml-dialog-speech+xml + + + + application/yang-data+cbor + + + + multipart/form-data + + + + application/vnd.afpc.modca-overlay + + + + application/vnd.3gpp-v2x-local-service-information + + + + application/vnd.uplanet.listcmd + + + + application/vnd.adobe.fxp + + + + application/p2p-overlay+xml + + + + application/encaprtp + + + + text/ecmascript + + + + model/step-xml+zip + + + + application/DIT + + + + application/3gppHalForms+json + + + + application/vnd.3gpp.mcptt-floor-request+xml + + + + application/vnd.ibm.modcap + + + + application/vnd.ahead.space + + + + application/calendar+xml + + + + application/msword + + + + application/vnd.oma.bcast.imd+xml + + + + application/vnd.apache.arrow.stream + + + + application/vnd.imagemeter.image+zip + + + + application/resource-lists-diff+xml + + + + application/vnd.etsi.asic-e+zip + + + + application/vnd.radisys.msml-conf+xml + + + + application/vnd.fluxtime.clip + + + + audio/AMR-WB + + + + application/elm+xml + + + + application/vnd.xecrets-encrypted + + + + application/vnd.genomatix.tuxedo + + + + image/jxsi + + + + image/hej2k + + + + application/SGML + + + + image/aces + + + + application/vnd.etsi.iptvsad-bc+xml + + + + application/vnd.century-systems.tcp_stream + + + + application/vnd.genozip + + + + audio/vnd.dolby.heaac.2 + + + + application/ibe-pkg-reply+xml + + + + application/vnd.mfmp + + + + application/hl7v2+xml + + + + application/vnd.3gpp.pic-bw-var + + + + application/vnd.msa-disk-image + + + + application/vnd.dvb.esgcontainer + + + + application/simple-filter+xml + + + + application/vnd.contact.cmsg + + + + application/cdmi-container + + + + application/vnd.powerbuilder7-s + + + + video/H263-1998 + + + + video/3gpp2 + + + + application/vnd.hp-jlyt + + + + application/vnd.music-niff + + + + application/dssc+xml + + + + application/vnd.wap.slc + + + + application/vnd.fujitsu.oasys3 + + + + application/vnd.nintendo.snes.rom + + + + video/vnd.dece.pd + + + + application/vnd.dvb.service + + + + application/atomsvc+xml + + + + application/swid+cbor + + + + application/vnd.groove-help + + + + text/vnd.DMClientScript + + + + application/vnd.afpc.modca-pagesegment + + + + model/vnd.bary + + + + application/vnd.rapid + + + + application/vnd.radisys.msml-audit-conn+xml + + + + application/vnd.uplanet.list-wbxml + + + + application/vnd.artisan+json + + + + audio/opus + + + + application/vnd.ms-windows.wsd.oob + + + + application/vnd.epson.ssf + + + + application/vnd.ibm.electronic-media + + + + application/alto-endpointcost+json + + + + application/vnd.umajin + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml + + + + application/vnd.ms-ims + + + + application/vnd.groove-identity-message + + + + application/EDI-consent + + + + application/vnd.3gpp.vae-info+xml + + + + application/vnd.oma.pal+xml + + + + application/jscontact+json + + + + application/vnd.eudora.data + + + + application/vnd.ims.imsccv1p3 + + + + application/clue_info+xml + + + + application/tzif + + + + application/vnd.ms-artgalry + + + + application/vnd.bpf + + + + application/prs.rdf-xml-crypt + + + + application/tamp-update-confirm + + + + application/vnd.3gpp.mcdata-service-config+xml + + + + application/vnd.osgi.bundle + + + + application/vnd.blink-idb-value-wrapper + + + + application/coap-payload + + + + application/atsc-dynamic-event-message + + + + application/vnd.cncf.helm.chart.content.v1.tar+gzip + + + + application/vnd.yamaha.remote-setup + + + + application/vnd.sealed.tiff + + + + application/ATF + + + + application/cdmi-object + + + + application/xcap-diff+xml + + + + application/vnd.cirpack.isdn-ext + + + + application/vnd.nato.bindingdataobject+json + + + + application/vnd.oipf.spdlist+xml + + + + video/vnd.iptvforum.1dparityfec-2005 + + + + application/vnd.ms-3mfdocument + + + + application/vnd.oma.poc.detailed-progress-report+xml + + + + application/vnd.nokia.iSDS-radio-presets + + + + application/cbor + + + + video/BT656 + + + + application/vnd.sealed.doc + + + + audio/vnd.sealedmedia.softseal.mpeg + + + + application/vnd.intertrust.digibox + + + + application/vnd.yamaha.smaf-audio + + + + image/emf + + + + application/mmt-aei+xml + + + + application/gnap-binding-rotation-jws + + + + model/vnd.dwf + + + + audio/G7291 + + + + application/vnd.3gpp.v2x + + + + audio/iLBC + + + + application/vnd.motorola.flexsuite.fis + + + + application/vnd.wordlift + + + + application/conference-info+xml + + + + application/vnd.sss-ntf + + + + application/simpleSymbolContainer + + + + application/vnd.zul + + + + application/rpki-roa + + + + application/vnd.nokia.landmark+wbxml + + + + application/aif+json + + + + audio/rtp-midi + + + + application/vnd.oma.dcdc + + + + application/vnd.rs-274x + + + + application/hyperstudio + + + + application/vnd.oasis.opendocument.chart-template + + + + application/prs.implied-document+xml + + + + application/lpf+zip + + + + application/vnd.ms-wmdrm.meter-resp + + + + application/lost+xml + + + + application/msc-mixer+xml + + + + application/vnd.ipfs.ipns-record + + + + text/raptorfec + + + + application/vnd.adobe.xdp+xml + + + + application/CDFX+XML + + + + application/vnd.3gpp.mcvideo-info+xml + + + + application/vnd.etsi.iptvservice+xml + + + + video/H261 + + + + application/pkcs7-mime + + + + application/vnd.openxmlformats-officedocument.presentationml.presentation + + + + application/vnd.oma.lwm2m+cbor + + + + text/example + + + + application/vnd.apache.parquet + + + + image/heif + + + + image/dpx + + + + audio/G719 + + + + application/vnd.dece.zip + + + + application/alto-networkmap+json + + + + application/raptorfec + + + + application/atomdeleted+xml + + + + application/vnd.japannet-payment-wakeup + + + + application/xml-patch+xml + + + + image/avcs + + + + text/css + + + + application/x-x509-ca-ra-cert + + + + application/vnd.epson.msf + + + + application/vnd.enphase.envoy + + + + application/vnd.llamagraphics.life-balance.desktop + + + + application/vnd.etsi.overload-control-policy-dataset+xml + + + + application/vnd.Mobius.PLC + + + + audio/GSM-EFR + + + + application/vnd.marlin.drm.conftoken+xml + + + + application/vnd.hal+xml + + + + audio/UEMCLIP + + + + application/PDX + + + + application/vnd.dm.delegation+xml + + + + application/td+json + + + + video/vnd.nokia.interleaved-multimedia + + + + application/vnd.3gpp.ussd+xml + + + + video/vnd.uvvu.mp4 + + + + application/beep+xml + + + + application/vnd.afpc.modca-formdef + + + + application/vnd.wqd + + + + application/example + + + + application/vnd.cosmocaller + + + + image/jxl + + + + application/multipart-core + + + + application/alto-costmapfilter+json + + + + application/vnd.japannet-registration + + + + image/vnd.airzip.accelerator.azv + + + + application/vnd.ubisoft.webplayer + + + + image/jxss + + + + application/vnd.shana.informed.formdata + + + + application/vnd.ms-windows.printerpairing + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml + + + + application/cwl + + + + application/vnd.nokia.n-gage.symbian.install + + + + application/vnd.3gpp.5gsa2x-local-service-information + + + + application/iges + + + + audio/t140c + + + + audio/vnd.presonus.multitrack + + + + text/calendar + + + + application/vnd.audiograph + + + + application/alto-cdni+json + + + + application/vnd.ruckus.download + + + + application/vnd.oma.lwm2m+json + + + + application/vnd.emclient.accessrequest+xml + + + + application/vnd.powerbuilder6 + + + + application/vnd.airzip.filesecure.azs + + + + application/vnd.ims.lti.v2.toolproxy.id+json + + + + application/automationml-aml+xml + + + + application/vnd.nokia.iptv.config+xml + + + + audio/sp-midi + + + + audio/usac + + + + application/vnd.intu.qbo + + + + application/vnd.osgi.dp + + + + application/vnd.afpc.afplinedata + + + + image/jxs + + + + application/samlassertion+xml + + + + application/batch-SMTP + + + + application/moss-keys + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml + + + + application/vnd.businessobjects + + + + application/jose + + + + application/vnd.hyper+json + + + + application/vnd.crick.clicker.wordbank + + + + application/jwk+json + + + + application/vnd.oai.workflows+json + + + + application/merge-patch+json + + + + application/vnd.lotus-freelance + + + + application/vnd.fujixerox.docuworks.container + + + + application/vnd.nato.bindingdataobject+cbor + + + + application/vnd.apple.numbers + + + + video/vnd.motorola.videop + + + + application/vnd.sealed.csf + + + + application/alto-updatestreamcontrol+json + + + + application/vnd.3gpp.mcdata-user-profile+xml + + + + application/vnd.etsi.aoc+xml + + + + application/vnd.resilient.logic + + + + application/vnd.pg.format + + + + video/jxsv + + + + application/vnd.ctct.ws+xml + + + + application/vnd.airzip.filesecure.azf + + + + text/vnd.motorola.reflex + + + + application/pkix-crl + + + + text/vnd.curl + + + + application/vnd.evolv.ecig.theme + + + + application/oxps + + + + video/vnd.dece.hd + + + + application/xml-dtd + + + + application/vnd.google-earth.kml+xml + + + + application/dskpp+xml + + + + application/vnd.semf + + + + application/tve-trigger + + + + application/vnd.lotus-approach + + + + application/geopackage+sqlite3 + + + + text/vnd.gml + + + + application/vnd.dvb.dvbisl+xml + + + + message/sip + + + + application/vnd.heroku+json + + + + application/vnd.previewsystems.box + + + + text/cql + + + + font/woff + + + + application/news-transmission + + + + application/parityfec + + + + application/vnd.age + + + + application/vnd.canon-lips + + + + application/vnd.msgpack + + + + application/spirits-event+xml + + + + application/vnd.3gpp.pic-bw-large + + + + text/cql-expression + + + + audio/LPC + + + + video/vnd.CCTV + + + + application/vnd.3gpp.mcvideo-affiliation-info+xml + + + + application/vnd.oma.bcast.stkm + + + + application/davmount+xml + + + + application/vnd.globalplatform.card-content-mgt + + + + image/vnd.mix + + + + application/vnd.1000minds.decision-model+xml + + + + audio/vnd.everad.plj + + + + application/tamp-apex-update + + + + application/vnd.Mobius.MQY + + + + application/dicom+xml + + + + application/fdf + + + + text/vnd.hans + + + + audio/vnd.dolby.pl2 + + + + audio/vnd.dolby.mlp + + + + audio/ATRAC3 + + + + message/s-http + + + + text/hl7v2 + + + + image/tiff + + + + application/reginfo+xml + + + + application/vnd.oma.cab-subs-invite+xml + + + + application/mpeg4-generic + + + + application/vnd.openxmlformats-officedocument.presentationml.slideshow + + + + video/H266 + + + + application/vnd.ericsson.quickcall + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml + + + + message/http + + + + application/geoxacml+xml + + + + application/vnd.capasystems-pg+json + + + + application/gltf-buffer + + + + font/woff2 + + + + application/vnd.dvb.iptv.alfec-base + + + + video/AV1 + + + + application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml + + + + application/vnd.collection.next+json + + + + application/mud+json + + + + application/vnd.hyper-item+json + + + + application/sensml+cbor + + + + audio/mhas + + + + audio/sofa + + + + message/sipfrag + + + + application/vnd.nimn + + + + application/vnd.nokia.landmark+xml + + + + application/vnd.fujixerox.docuworks + + + + application/rtf + + + + audio/SMV-QCP + + + + audio/vorbis-config + + + + application/sgml-open-catalog + + + + application/vnd.iptc.g2.conceptitem+xml + + + + application/dec-dx + + + + video/vnd.dece.video + + + + application/vnd.minisoft-hp3000-save + + + + application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml + + + + audio/vnd.nuera.ecelp7470 + + + + application/tamp-sequence-adjust + + + + application/mads+xml + + + + application/vnd.yamaha.hv-script + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml + + + + application/vnd.infotech.project + + + + application/vnd.sealed.3df + + + + application/vnd.syft+json + + + + application/vnd.kde.karbon + + + + application/vnd.sbm.mid2 + + + + application/java-archive + + + + application/vnd.shopkick+json + + + + application/vnd.ah-barcode + + + + application/vnd.ecowin.seriesrequest + + + + application/vnd.collabio.xodocuments.document + + + + audio/G723 + + + + application/ssml+xml + + + + application/vnd.vd-study + + + + text/vnd.a + + + + text/n3 + + + + application/vnd.dvb.ipdcroaming + + + + application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml + + + + application/pidf+xml + + + + application/vnd.pagerduty+json + + + + application/vnd.oipf.mippvcontrolmessage+xml + + + + application/news-groupinfo + + + + application/vnd.sss-dtf + + + + application/mbms-schedule+xml + + + + application/vnd.gnu.taler.merchant+json + + + + text/vnd.si.uricatalogue + + + + video/iso.segment + + + + audio/vnd.rip + + + + application/vnd.liberty-request+xml + + + + application/vnd.ms-office.activeX+xml + + + + application/vnd.dvb.notif-ia-registration-response+xml + + + + application/vnd.gentoo.gpkg + + + + application/cdni + + + + application/vnd.collection.doc+json + + + + application/samlmetadata+xml + + + + application/dashdelta + + + + application/voicexml+xml + + + + application/prs.implied-object+json + + + + application/remote-printing + + + + application/vnd.ms-powerpoint + + + + application/vnd.3gpp.seal-network-QoS-management-info+xml + + + + image/vnd.fujixerox.edmics-mmr + + + + application/vnd.3gpp.mcptt-mbms-usage-info+xml + + + + audio/scip + + + + application/vnd.micrografx.flo + + + + font/collection + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml + + + + application/vnd.dvb.pfr + + + + application/vnd.koan + + + + audio/PCMA + + + + application/tlsrpt+gzip + + + + application/vemmi + + + + application/vnd.ms-fontobject + + + + application/vnd.ms-powerpoint.slideshow.macroEnabled.12 + + + + application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml + + + + application/provenance+xml + + + + text/vnd.trolltech.linguist + + + + application/vnd.ntt-local.ogw_remote-access + + + + application/sparql-query + + + + application/vnd.pt.mundusmundi + + + + application/exi + + + + video/vnd.fvt + + + + application/vnd.etsi.iptvdiscovery+xml + + + + text/vnd.abc + + + + image/vnd.dvb.subtitle + + + + application/odm+xml + + + + application/vnd.hc+json + + + + application/vnd.vidsoft.vidconference + + + + message/feedback-report + + + + application/vnd.veryant.thin + + + + video/vc1 + + + + application/vnd.clonk.c4group + + + + application/vnd.seemail + + + + application/vnd.intu.qfx + + + + audio/eac3 + + + + application/mbms-envelope+xml + + + + application/vnd.ims.imsccv1p2 + + + + application/gzip + + + + application/held+xml + + + + application/vnd.lotus-notes + + + + application/vnd.SimTech-MindMapper + + + + application/vnd.curl + + + + application/vnd.3gpp.mcdata-regroup+xml + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml + + + + application/vnd.wt.stf + + + + application/vnd.hp-PCLXL + + + + application/swid+xml + + + + application/vnd.openxmlformats-officedocument.presentationml.template.main+xml + + + + audio/vnd.dts.uhd + + + + multipart/encrypted + + + + application/pidf-diff+xml + + + + text/ulpfec + + + + model/vnd.usda + + + + audio/G726-24 + + + + application/marc + + + + application/vnd.hbci + + + + application/vnd.recordare.musicxml+xml + + + + application/node + + + + text/uri-list + + + + application/pgp-signature + + + + application/vnd.sun.wadl+xml + + + + application/vnd.marlin.drm.license+xml + + + + application/fhir+xml + + + + application/vnd.ecowin.fileupdate + + + + audio/vnd.dvb.file + + + + application/vnd.3gpp.mcdata-signalling + + + + application/vnd.balsamiq.bmml+xml + + + + application/vnd.ms-xpsdocument + + + + application/vcard+json + + + + application/vnd.jisp + + + + application/vnd.gerber + + + + application/vnd.radisys.msml-dialog+xml + + + + application/EDI-X12 + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml + + + + application/x-x509-next-ca-cert + + + + application/vnd.onepagertat + + + + application/pkix-attr-cert + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml + + + + application/vnd.Mobius.DIS + + + + application/vnd.pwg-multiplexed + + + + application/mac-binhex40 + + + + application/session-info + + + + application/vnd.fastcopy-disk-image + + + + application/dvcs + + + + application/vnd.yamaha.openscoreformat + + + + application/vnd.artsquare + + + + application/vnd.httphone + + + + application/vnd.bekitzur-stech+json + + + + audio/flexfec + + + + audio/GSM + + + + application/vnd.hp-hps + + + + image/jxsc + + + + application/vnd.3gpp.mcptt-location-info+xml + + + + audio/TETRA_ACELP + + + + application/vnd.gentoo.ebuild + + + + application/vnd.3gpp.mcptt-regroup+xml + + + + application/vnd.balsamiq.bmpr + + + + application/vnd.fints + + + + application/vnd.intercon.formnet + + + + application/elm+json + + + + application/vnd.ms-works + + + + application/vnd.shx + + + + message/imdn+xml + + + + application/rls-services+xml + + + + application/wsdl+xml + + + + image/avif + + + + application/vnd.oma.bcast.ltkm + + + + application/vnd.fuzzysheet + + + + audio/EVRCB1 + + + + font/ttf + + + + application/ccxml+xml + + + + audio/vnd.octel.sbc + + + + application/vnd.fsc.weblaunch + + + + application/vnd.3gpp.interworking-data + + + + application/vnd.RenLearn.rlprint + + + + application/vnd.fujitsu.oasysgp + + + + application/vnd.afpc.modca-cmtable + + + + application/framework-attributes+xml + + + + application/vnd.acucorp + + + + application/yang-patch+json + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml + + + + model/vnd.parasolid.transmit.text + + + + message/global-headers + + + + audio/vnd.dece.audio + + + + video/CelB + + + + audio/ip-mr_v2.5 + + + + application/vnd.3gpp.5gnas + + + + application/atomcat+xml + + + + text/vnd.sosi + + + + application/vnd.syncml.dm.notification + + + + application/vcard+xml + + + + application/zstd + + + + audio/vnd.audiokoz + + + + image/prs.btif + + + + image/apng + + + + application/jrd+json + + + + application/sensml+json + + + + application/vnd.oasis.opendocument.image-template + + + + audio/MELP600 + + + + image/naplps + + + + application/vnd.radisys.msml-dialog-group+xml + + + + application/jf2feed+json + + + + application/vnd.oipf.contentaccessstreaming+xml + + + + application/metalink4+xml + + + + application/mathml-presentation+xml + + + + audio/1d-interleaved-parityfec + + + + application/vnd.amundsen.maze+xml + + + + application/vnd.syncml.dmddf+wbxml + + + + application/vnd.apache.arrow.file + + + + application/vnd.Quark.QuarkXPress + + + + application/route-s-tsid+xml + + + + application/vnd.noblenet-sealer + + + + model/vnd.gs-gdl + + + + video/vnd.sealed.mpeg4 + + + + application/vnd.cinderella + + + + application/vnd.scribus + + + + audio/dsr-es202212 + + + + application/vnd.blueice.multipass + + + + application/ibe-key-request+xml + + + + application/vnd.visio + + + + application/vnd.MFER + + + + application/vnd.ims.lti.v2.toolproxy+json + + + + message/global + + + + application/mosskey-request + + + + application/vnd.dvb.ipdcesgpdd + + + + video/MP4V-ES + + + + application/vnd.3gpp.current-location-discovery+xml + + + + application/activemessage + + + + application/dicom + + + + application/rtx + + + + application/vnd.uplanet.signal + + + + application/smil + + + + application/applefile + + + + application/vnd.opentimestamps.ots + + + + application/vnd.oci.image.manifest.v1+json + + + + application/MF4 + + + + text/vnd.ficlab.flt + + + + application/vnd.apple.keynote + + + + application/vnd.3gpp.ngap + + + + application/vnd.uplanet.cacheop-wbxml + + + + audio/ac3 + + + + application/its+xml + + + + application/vnd.oma.group-usage-list+xml + + + + message/CPIM + + + + application/vnd.igloader + + + + video/evc + + + + application/vnd.ms-excel.addin.macroEnabled.12 + + + + application/vnd.aplextor.warrp+json + + + + application/set-registration-initiation + + + + audio/flac + + + + message/global-disposition-notification + + + + application/yang + + + + application/vnd.meridian-slingshot + + + + application/vnd.anki + + + + application/n-quads + + + + video/vnd.directv.mpeg-tts + + + + application/vnd.motorola.flexsuite.adsi + + + + video/vc2 + + + + application/vnd.relpipe + + + + application/ATFX + + + + model/vnd.opengex + + + + application/vnd.gov.sk.e-form+zip + + + + application/vnd.cups-ppd + + + + application/vnd.onepagertatp + + + + application/vnd.cyclonedx+json + + + + application/xcap-el+xml + + + + application/mp4 + + + + application/pkcs7-signature + + + + audio/G722 + + + + application/vnd.powerbuilder75-s + + + + application/vnd.micrografx.igx + + + + application/vnd.intergeo + + + + image/bmp + + + + video/1d-interleaved-parityfec + + + + application/call-completion + + + + audio/mpa-robust + + + + application/mosskey-data + + + + audio/SMV + + + + application/mipc + + + + application/smpte336m + + + + application/vnd.oxli.countgraph + + + + application/set-payment-initiation + + + + image/vnd.globalgraphics.pgb + + + + application/vnd.maxmind.maxmind-db + + + + application/srgs + + + + application/EmergencyCallData.Comment+xml + + + + application/vnd.oasis.opendocument.formula-template + + + + application/vnd.oasis.opendocument.presentation-template + + + + application/vnd.ms-PrintSchemaTicket+xml + + + + application/alto-updatestreamparams+json + + + + text/vnd.dvb.subtitle + + + + application/vq-rtcpxr + + + + application/vnd.mdl-mbsdf + + + + application/vnd.oma.bcast.sprov+xml + + + + application/vnd.afpc.foca-charset + + + + application/vnd.shana.informed.interchange + + + + application/vnd.gentics.grd+json + + + + model/prc + + + + application/vnd.sealed.xls + + + + application/mbms-register+xml + + + + application/alto-tipsparams+json + + + + application/thraud+xml + + + + image/jxr + + + + application/vnd.bzip3 + + + + model/e57 + + + + model/vnd.gtw + + + + application/vnd.wv.csp+xml + + + + application/vnd.ms-wpl + + + + application/vnd.unity + + + + application/vnd.3gpp.seal-ue-config-info+xml + + + + application/trickle-ice-sdpfrag + + + + application/EmergencyCallData.SubscriberInfo+xml + + + + application/vnd.fujifilm.fb.docuworks.container + + + + application/vnd.pcos + + + + application/DII + + + + application/vnd.oracle.resource+json + + + + video/3gpp-tt + + + + application/gnap-binding-jws + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml + + + + application/activity+json + + + + application/vnd.fujixerox.ddd + + + + application/vnd.dbf + + + + application/vnd.3gpp.mcptt-ue-init-config+xml + + + + video/H264 + + + + application/tamp-sequence-adjust-confirm + + + + application/xcon-conference-info+xml + + + + application/vnd.google-earth.kmz + + + + application/scaip+xml + + + + application/vnd.crypto-shade-file + + + + application/spdx+json + + + + application/pskc+xml + + + + application/ST2110-41 + + + + application/urc-ressheet+xml + + + + application/vnd.motorola.flexsuite.gotap + + + + application/voucher-cms+json + + + + video/raptorfec + + + + application/vnd.pg.osasli + + + + application/vnd.3gpp.seal-unicast-info+xml + + + + application/vnd.leap+json + + + + application/vnd.3gpp.access-transfer-events+xml + + + + application/vnd.oma.poc.invocation-descriptor+xml + + + + video/vnd.hns.video + + + + application/vnd.imagemeter.folder+zip + + + + application/cose + + + + application/xcap-ns+xml + + + + application/vnd.zzazz.deck+xml + + + + application/vnd.mseq + + + + video/3gpp + + + + application/cda+xml + + + + application/vnd.powerbuilder6-s + + + + application/dssc+der + + + + application/wspolicy+xml + + + + application/clue+xml + + + + application/vnd.tri.onesource + + + + application/dash+xml + + + + application/vnd.eln+zip + + + + application/vnd.oma.dcd + + + + application/vnd.wv.csp+wbxml + + + + application/vnd.3gpp2.tcap + + + + application/fits + + + + application/vnd.dvb.notif-init+xml + + + + message/ohttp-req + + + + model/vnd.valve.source.compiled-map + + + + application/pgp-encrypted + + + + application/cccex + + + + application/vnd.oftn.l10n+json + + + + application/vnd.iso11783-10+zip + + + + application/inkml+xml + + + + application/vnd.hydrostatix.sof-data + + + + application/IOTP + + + + application/vnd.stepmania.package + + + + application/vnd.fujifilm.fb.jfi+xml + + + + application/vnd.ficlab.flb+zip + + + + application/vnd.gpxsee.map+xml + + + + application/vnd.japannet-jpnstore-wakeup + + + + application/scvp-cv-response + + + + audio/midi-clip + + + + application/xcap-att+xml + + + + application/vnd.comicbook-rar + + + + model/vnd.rosette.annotated-data-model + + + + application/vnd.wap.wmlscriptc + + + + video/vnd.radgamettools.bink + + + + multipart/appledouble + + + + application/vnd.semd + + + + application/vnd.geospace + + + + image/vnd.pco.b16 + + + + application/vnd.3gpp.s1ap + + + + application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml + + + + application/vnd.geogebra.tool + + + + application/vnd.japannet-directory-service + + + + application/vnd.irepository.package+xml + + + + application/vnd.openxmlformats-officedocument.themeOverride+xml + + + + video/scip + + + + application/vnd.wolfram.mathematica.package + + + + application/vnd.desmume.movie + + + + application/dialog-info+xml + + + + application/mbms-msk-response+xml + + + + application/vnd.3gpp.seal-info+xml + + + + application/vnd.uoml+xml + + + + application/mmt-usd+xml + + + + application/concise-problem-details+cbor + + + + application/vnd.etsi.simservs+xml + + + + image/vnd.mozilla.apng + + + + application/express + + + + image/vnd.fujixerox.edmics-rlc + + + + video/flexfec + + + + application/rdap+json + + + + + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.template + + + + application/vnd.cluetrust.cartomobile-config-pkg + + + + application/vnd.Mobius.DAF + + + + application/vnd.openxmlformats-officedocument.presentationml.slide + + + + application/fastsoap + + + + audio/DVI4 + + + + application/vnd.ezpix-album + + + + application/vnd.kde.kchart + + + + application/vnd.gridmp + + + + application/timestamp-reply + + + + application/vnd.rainstor.data + + + + application/vnd.maxar.archive.3tz+zip + + + + application/vnd.msign + + + + application/n-triples + + + + model/vnd.collada+xml + + + + application/cwl+yaml + + + + application/atom+xml + + + + application/vnd.panoply + + + + application/vnd.xmpie.plan + + + + image/heif-sequence + + + + application/vnd.realvnc.bed + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml + + + + application/vnd.oasis.opendocument.base + + + + application/vnd.biopax.rdf+xml + + + + application/vnd.yamaha.hv-dic + + + + application/EmergencyCallData.DeviceInfo+xml + + + + text/shaclc + + + + application/tamp-error + + + + application/cea-2018+xml + + + + audio/vnd.CELP + + + + application/urc-uisocketdesc+xml + + + + application/cybercash + + + + image/vnd.radiance + + + + application/vnd.apple.mpegurl + + + + application/vnd.etsi.iptvsync+xml + + + + application/route-apd+xml + + + + application/vnd.las + + + + application/vnd.geometry-explorer + + + + audio/BV16 + + + + application/vnd.3gpp.crs+xml + + + + audio/dsr-es201108 + + + + image/jphc + + + + application/vnd.oma.drm.risd+xml + + + + multipart/report + + + + application/senml-etch+cbor + + + + application/vnd.motorola.iprm + + + + application/rpki-ghostbusters + + + + application/vnd.ctc-posml + + + + video/vnd.iptvforum.2dparityfec-1010 + + + + application/vnd.lotus-1-2-3 + + + + application/vnd.3gpp.5gsa2x + + + + text/grammar-ref-list + + + + application/vnd.oasis.opendocument.formula + + + + application/vnd.cryptii.pipe+json + + + + application/vnd.dvb.ipdcesgaccess2 + + + + video/vnd.dece.mp4 + + + + video/smpte291 + + + + application/vnd.sbm.cid + + + + application/vnd.radisys.msml+xml + + + + audio/vnd.dolby.pulse.1 + + + + application/vnd.yamaha.hv-voice + + + + audio/vnd.nokia.mobile-xmf + + + + application/fdt+xml + + + + application/xv+xml + + + + audio/vnd.qcelp + + + + application/logout+jwt + + + + application/vnd.xmpie.dpkg + + + + application/vnd.omads-email+xml + + + + application/geo+json-seq + + + + application/vnd.3gpp.mcptt-signed+xml + + + + application/vnd.insors.igm + + + + image/vnd.dece.graphic + + + + application/vnd.macports.portpkg + + + + application/vnd.oasis.opendocument.text-web + + + + model/obj + + + + application/slate + + + + image/vnd.fpx + + + + application/vnd.musician + + + + application/soap+xml + + + + application/vnd.nokia.catalogs + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml + + + + application/vnd.oma.cab-user-prefs+xml + + + + application/vnd.afpc.modca-objectcontainer + + + + audio/prs.sid + + + + application/vnd.epson.quickanime + + + + application/expect-ct-report+json + + + + video/DV + + + + image/vnd.sealedmedia.softseal.jpg + + + + application/vnd.motorola.flexsuite + + + + application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml + + + + application/trig + + + + audio/32kadpcm + + + + model/vnd.parasolid.transmit.binary + + + + application/vnd.ga4gh.passport+jwt + + + + application/vnd.oipf.pae.gem + + + + application/pkcs8-encrypted + + + + application/vnd.ecip.rlp + + + + audio/vnd.dts.hd + + + + message/global-delivery-status + + + + application/vnd.etsi.cug+xml + + + + application/prs.vcfbzip2 + + + + application/vnd.gentoo.manifest + + + + application/atsc-rsat+xml + + + + application/vnd.proteus.magazine + + + + application/vnd.Mobius.TXF + + + + application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml + + + + application/vnd.cendio.thinlinc.clientconf + + + + application/vnd.pocketlearn + + + + application/vnd.3gpp.sms + + + + application/vnd.uplanet.bearer-choice + + + + application/ld+json + + + + application/mbms-msk+xml + + + + application/vnd.cyan.dean.root+xml + + + + text/vnd.in3d.spot + + + + text/html + + + + video/rtx + + + + audio/TSVCIS + + + + text/strings + + + + application/vnd.3gpp.seal-user-profile-info+xml + + + + video/ogg + + + + audio/vnd.dolby.pl2x + + + + application/vnd.lotus-wordpro + + + + text/vtt + + + + application/vnd.nokia.radio-preset + + + + application/cnrp+xml + + + + application/vnd.uiq.theme + + + + application/vnd.ims.lti.v2.toolsettings+json + + + + application/vnd.3gpp.mcvideo-transmission-request+xml + + + + application/clr + + + + application/vnd.powerbuilder75 + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml + + + + application/pkcs12 + + + + application/3gpp-ims+xml + + + + application/vnd.radisys.msml-dialog-transform+xml + + + + application/rpki-updown + + + + application/vnd.kahootz + + + + text/flexfec + + + + application/senml+cbor + + + + application/vnd.epson.salt + + + + application/vnd.font-fontforge-sfd + + + + application/vnd.is-xpr + + + + application/xacml+xml + + + + application/QSIG + + + + text/directory + + + + application/ODA + + + + text/gff3 + + + + application/mpeg4-iod-xmt + + + + application/vnd.radisys.msml-dialog-base+xml + + + + video/vnd.motorola.video + + + + application/vnd.dvb.iptv.alfec-enhancement + + + + application/vnd.dtg.local.flash + + + + video/example + + + + application/vnd.oma.bcast.provisioningtrigger + + + + audio/mpeg + + + + application/vnd.hal+json + + + + application/vnd.groove-tool-template + + + + application/vnd.sigrok.session + + + + audio/clearmode + + + + application/oblivious-dns-message + + + + text/javascript + + + + application/vnd.multiad.creator.cif + + + + audio/EVRCWB1 + + + + audio/EVRCNW0 + + + + application/vnd.restful+json + + + + application/sql + + + + application/3gppHal+json + + + + application/vnd.neurolanguage.nlu + + + + audio/EVRC1 + + + + application/fastinfoset + + + + application/pkix-cert + + + + application/yang-patch+xml + + + + video/nv + + + + application/vnd.firemonkeys.cloudcell + + + + text/vnd.graphviz + + + + image/example + + + + application/vnd.cloanto.rp9 + + + + application/x400-bp + + + + image/ktx2 + + + + application/vnd.webturbo + + + + application/vnd.cups-raw + + + + application/senml-exi + + + + application/cdmi-queue + + + + application/city+json + + + + image/svg+xml + + + + audio/vnd.ms-playready.media.pya + + + + audio/MPA + + + + audio/rtploopback + + + + application/octet-stream + + + + application/vnd.shootproof+json + + + + application/vnd.collabio.xodocuments.document-template + + + + application/vnd.3gpp.seal-mbms-usage-info+xml + + + + application/vnd.cncf.helm.chart.provenance.v1.prov + + + + application/vnd.afpc.modca-mediummap + + + + application/aif+cbor + + + + application/vnd.ntt-local.sip-ta_tcp_stream + + + + application/vnd.tmobile-livetv + + + + application/vnd.ezpix-package + + + + image/avci + + + + application/vnd.enliven + + + + application/vnd.nokia.pcd+wbxml + + + + application/set-payment + + + + application/zip + + + + application/urc-targetdesc+xml + + + + application/3gpdash-qoe-report+xml + + + + application/vnd.yamaha.openscoreformat.osfpvg+xml + + + + application/vnd.ecowin.series + + + + application/vnd.syncml.ds.notification + + + + application/vnd.oipf.cspg-hexbinary + + + + application/vnd.oai.workflows+yaml + + + + application/vnd.oasis.opendocument.chart + + + + application/vnd.openxmlformats-officedocument.drawingml.chart+xml + + + + application/vnd.snesdev-page-table + + + + application/vnd.ipld.car + + + + image/vnd.djvu + + + + audio/DV + + + + text/troff + + + + audio/3gpp2 + + + + application/javascript + + + + application/vnd.bmi + + + + text/vnd.familysearch.gedcom + + + + application/vnd.kenameaapp + + + + message/example + + + + application/vnd.kde.kivio + + + + application/vnd.3gpp-prose+xml + + + + application/vnd.bpf3 + + + + application/vnd.ldev.productlicensing + + + + model/vnd.flatland.3dml + + + + application/ipfix + + + + audio/L8 + + + + model/vnd.sap.vds + + + + application/vnd.3gpp.lpp + + + + application/vnd.amazon.mobi8-ebook + + + + application/vnd.arastra.swi + + + + audio/EVS + + + + application/sep+xml + + + + application/vnd.dece.ttml+xml + + + + application/vnd.japannet-registration-wakeup + + + + application/vnd.ms-powerpoint.addin.macroEnabled.12 + + + + application/jscalendar+json + + + + application/vnd.novadigm.EDM + + + + application/vnd.radisys.msml-audit-dialog+xml + + + + application/vnd.sss-cod + + + + application/mbms-user-service-description+xml + + + + application/vnd.epson.esf + + + + audio/example + + + + application/ohttp-keys + + + + application/vnd.trueapp + + + + application/vnd.japannet-setstore-wakeup + + + + application/cpl+xml + + + + application/vnd.groove-tool-message + + + + application/vnd.openxmlformats-officedocument.drawing+xml + + + + application/vnd.truedoc + + + + text/spdx + + + + application/vnd.document+json + + + + application/vnd.osgeo.mapguide.package + + + + application/vnd.laszip + + + + application/vnd.freelog.comic + + + + text/vnd.senx.warpscript + + + + text/rtploopback + + + + application/ace+cbor + + + + application/vnd.ims.imsccv1p1 + + + + application/vnd.gentoo.catmetadata+xml + + + + application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml + + + + application/vnd.ncd.control + + + + application/vnd.acm.addressxfer+json + + + + application/vnd.belightsoft.lhzl+zip + + + + application/vnd.collabio.xodocuments.presentation + + + + application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml + + + + application/vnd.mif + + + + application/vnd.cncf.helm.config.v1+json + + + + text/fhirpath + + + + application/private-token-issuer-directory + + + + application/vnd.yamaha.through-ngn + + + + application/vnd.citationstyles.style+xml + + + + model/u3d + + + + application/vnd.hzn-3d-crossword + + + + application/vnd.nokia.landmarkcollection+xml + + + + application/vnd.wasmflow.wafl + + + + audio/matroska + + + + audio/vnd.dra + + + + audio/vnd.nortel.vbk + + + + image/jp2 + + + + audio/vnd.3gpp.iufp + + + + model/3mf + + + + application/vnd.sycle+xml + + + + application/vnd.dvb.notif-ia-registration-request+xml + + + + application/vnd.mapbox-vector-tile + + + + audio/MELP + + + + application/vnd.etsi.mheg5 + + + + application/vnd.micro+json + + + + audio/amr-wb+ + + + + application/vnd.erofs + + + + audio/PCMU-WB + + + + audio/vnd.vmx.cvsd + + + + application/vnd.pwg-xhtml-print+xml + + + + application/vnd.nokia.radio-presets + + + + application/vnd.xmi+xml + + + + application/vnd.oasis.opendocument.presentation + + + + application/vnd.gov.sk.e-form+xml + + + + application/vnd.nato.bindingdataobject+xml + + + + application/vnd.collabio.xodocuments.spreadsheet-template + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml + + + + application/vnd.osgi.subsystem + + + + audio/G7221 + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml + + + + application/vnd.sar + + + + application/wordperfect5.1 + + + + video/jpeg2000 + + + + audio/fwdred + + + + application/vnd.noblenet-directory + + + + audio/G726-16 + + + + application/index.obj + + + + application/EmergencyCallData.eCall.MSD + + + + application/sbml+xml + + + + application/index.vnd + + + + application/vnd.xmpie.ppkg + + + + application/vnd.ms-htmlhelp + + + + application/vnd.fut-misnet + + + + application/sslkeylogfile + + + + audio/dsr-es202211 + + + + application/vnd.gentoo.eclass + + + + application/sieve + + + + audio/rtx + + + + application/vnd.vsf + + + + text/rfc822-headers + + + + application/atsc-dwd+xml + + + + application/vnd.microsoft.portable-executable + + + + application/vnd.adobe.flash.movie + + + + application/vnd.openstreetmap.data+xml + + + + audio/QCELP + + + + image/heic-sequence + + + + application/vnd.3gpp.mcptt-user-profile+xml + + + + audio/mp4 + + + + audio/EVRCNW + + + + video/vnd.nokia.videovoip + + + + application/news-checkgroups + + + + multipart/header-set + + + + application/vnd.hp-hpid + + + + message/news + + + + application/vnd.astraea-software.iota + + + + application/vnd.oma-scws-http-response + + + + application/vnd.netfpx + + + + application/vnd.siren+json + + + + application/vnd.chemdraw+xml + + + + text/xml + + + + application/vnd.dtg.local.html + + + + application/vnd.fujitsu.oasys + + + + audio/G726-40 + + + + application/vnd.wmf.bootstrap + + + + image/vnd.xiff + + + + application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml + + + + application/vnd.publishare-delta-tree + + + + audio/SMV0 + + + + application/vnd.marlin.drm.mdcf + + + + application/json-patch+json + + + + multipart/signed + + + + image/jph + + + + application/sarif-external-properties+json + + + + text/csv + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml + + + + application/index.response + + + + text/vnd.wap.si + + + + application/riscos + + + + text/jcr-cnd + + + + application/cdmi-domain + + + + application/sensml+xml + + + + application/pgp-keys + + + + application/xenc+xml + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml + + + + application/vnd.swiftview-ics + + + + application/tzif-leap + + + + application/vnd.ufdl + + + + application/vnd.nokia.pcd+xml + + + + application/rpki-checklist + + + + application/vnd.ms-wmdrm.meter-chlg-req + + + + application/vnd.jsk.isdn-ngn + + + + application/xliff+xml + + + + application/vnd.youtube.yt + + + + application/vnd.3gpp.mcvideo-service-config+xml + + + + application/vnd.denovo.fcselayout-link + + + + application/vnd.dreamfactory + + + + application/vnd.medicalholodeck.recordxr + + + + video/vnd.ms-playready.media.pyv + + + + audio/vnd.cns.anp1 + + + + audio/EVRCB0 + + + + application/vnd.oipf.dae.svg+xml + + + + application/secevent+jwt + + + + application/sbe + + + + application/vnd.eszigno3+xml + + + + application/vnd.cyclonedx+xml + + + + application/vnd.dvb.ait + + + + application/vnd.joost.joda-archive + + + + image/prs.pti + + + + application/vnd.openxmlformats-officedocument.extended-properties+xml + + + + application/vnd.oasis.opendocument.spreadsheet + + + + application/tlsrpt+json + + + + application/vnd.3gpp.seal-group-doc+xml + + + + text/xml-external-parsed-entity + + + + multipart/vnd.bint.med-plus + + + + audio/dls + + + + video/quicktime + + + + video/raw + + + + application/atsc-rdt+json + + + + application/vnd.route66.link66+xml + + + + application/vnd.dataresource+json + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml + + + + application/alto-costmap+json + + + + application/vnd.yellowriver-custom-menu + + + + application/prs.implied-object+yaml + + + + application/vnd.sybyl.mol2 + + + + text/wgsl + + + + audio/vnd.hns.audio + + + + application/vnd.uplanet.channel + + + + application/vnd.smart.teacher + + + + application/vnd.ims.lis.v2.result+json + + + + application/vnd.mophun.certificate + + + + model/vnd.mts + + + + application/vnd.oma.poc.groups+xml + + + + application/vnd.jam + + + + application/senml-etch+json + + + + application/vnd.nokia.n-gage.data + + + + audio/L20 + + + + application/simple-message-summary + + + + application/commonground + + + + application/vnd.commerce-battelle + + + + application/vnd.coffeescript + + + + model/example + + + + application/cellml+xml + + + + application/cdmi-capability + + + + application/vnd.shana.informed.package + + + + application/vnd.radisys.msml-dialog-fax-detect+xml + + + + application/pvd+json + + + + application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + + + + application/vnd.nebumind.line + + + + application/vnd.ocf+cbor + + + + application/vnd.fujifilm.fb.docuworks + + + + model/step + + + + image/hsj2 + + + + application/vnd.acm.chatbot+json + + + + text/vnd.ascii-art + + + + video/mp4 + + + + application/vnd.drive+json + + + + application/vnd.bint.med-content + + + + video/vnd.iptvforum.1dparityfec-1010 + + + + application/vnd.oma.bcast.drm-trigger+xml + + + + application/EmergencyCallData.ServiceInfo+xml + + + + application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml + + + + application/stratum + + + + application/vnd.pmi.widget + + + + application/tnauthlist + + + + text/1d-interleaved-parityfec + + + + application/captive+json + + + + application/vnd.oipf.dae.xhtml+xml + + + + application/vnd.familysearch.gedcom+zip + + + + application/vnd.nitf + + + + application/ogg + + + + text/fwdred + + + + application/vnd.fujitsu.oasysprs + + + + application/vnd.kde.kformula + + + + application/vnd.aristanetworks.swi + + + + audio/ogg + + + + application/mp21 + + + + application/prs.implied-executable + + + + audio/parityfec + + + + application/vnd.etsi.tsl+xml + + + + application/epub+zip + + + + image/vnd.cns.inf2 + + + + text/cql-identifier + + + + application/vnd.xmpie.cpkg + + + + image/webp + + + + image/vnd.sealed.png + + + + application/vnd.americandynamics.acc + + + + audio/mpeg4-generic + + + + application/grib + + + + application/macwriteii + + + + audio/GSM-HR-08 + + + + application/vnd.3gpp-prose-pc8+xml + + + + model/gltf+json + + + + application/vnd.oma.lwm2m+tlv + + + + message/vnd.si.simp + + + + application/vnd.3gpp.mcvideo-affiliation-command+xml + + + + audio/asc + + + + application/vnd.uplanet.alert + + + + application/vnd.3gpp.mcdata-affiliation-command+xml + + + + application/vnd.oasis.opendocument.graphics + + + + audio/vorbis + + + + application/vnd.nearst.inv+json + + + + application/vnd.crick.clicker + + + + application/vnd.sealed.mht + + + + application/csta+xml + + + + application/vnd.veritone.aion+json + + + + application/font-sfnt + + + + application/vnd.wap.wmlc + + + + application/cms + + + + application/vnd.paos.xml + + + + application/dash-patch+xml + + + + application/vnd.kde.kspread + + + + application/json + + + + application/vnd.oasis.opendocument.text-master + + + + application/vnd.apple.pages + + + + application/vnd.japannet-verification + + + + application/vnd.valve.source.material + + + + text/vnd.exchangeable + + + + application/vnd.oma.bcast.sgdd+xml + + + + application/xhtml+xml + + + + image/png + + + + application/vnd.stepmania.stepchart + + + + application/vnd.ecdis-update + + + + application/vnd.etsi.mcid+xml + + + + application/vnd.amadeus+json + + + + application/vnd.onepagertatx + + + + application/eshop + + + + application/json-seq + + + + audio/vnd.nuera.ecelp9600 + + + + application/alto-cdnifilter+json + + + + application/vnd.novadigm.EXT + + + + application/vnd.ntt-local.sip-ta_remote + + + + application/vnd.filmit.zfc + + + + application/senml+xml + + + + application/vnd.think-cell.ppttc+json + + diff --git a/ckanext/schemingdcat/codelists/endpoints.yaml b/ckanext/schemingdcat/codelists/endpoints.yaml index a480e93..ad9da46 100644 --- a/ckanext/schemingdcat/codelists/endpoints.yaml +++ b/ckanext/schemingdcat/codelists/endpoints.yaml @@ -1,51 +1,87 @@ catalog_endpoints: - - name: euro_dcat_ap_2_rdf - display_name: RDF DCAT-AP + - name: eu_dcat_ap_2_rdf + display_name: RDF DCAT-AP 2 type: lod format: rdf - image_display_url: /images/icons/endpoints/euro_dcat_ap_2.svg + image_display_url: /images/icons/endpoints/eu_dcat_ap.svg endpoint_icon: /images/endpoints/catalog-rdf-eu.png fa_icon: fa-share-alt - description: RDF DCAT-AP Endpoint for european data portals. - profile: euro_dcat_ap_2 - profile_label: DCAT-AP - version: null + description: RDF DCAT-AP 2.1.1 Endpoint for european data portals. + profile: eu_dcat_ap_2,eu_dcat_ap_scheming + profile_label: DCAT-AP 2 + profile_label_order: 1 + profile_info_url: https://joinup.ec.europa.eu/collection/semic-support-centre/solution/dcat-application-profile-data-portals-europe + version: 2.1.1 - - name: euro_dcat_ap_2_jsonld - display_name: JSON-LD DCAT-AP + - name: eu_dcat_ap_3_rdf + display_name: RDF DCAT-AP 3 + type: lod + format: rdf + image_display_url: /images/icons/endpoints/eu_dcat_ap.svg + endpoint_icon: /images/endpoints/catalog-rdf-eu.png + fa_icon: fa-share-alt + description: RDF DCAT-AP 3.0.0 Endpoint for european data portals. + profile: eu_dcat_ap_3,eu_dcat_ap_scheming + profile_label: DCAT-AP 3 + profile_label_order: 1 + profile_info_url: https://joinup.ec.europa.eu/collection/semic-support-centre/solution/dcat-application-profile-data-portals-europe + version: 3.0.0 + + - name: eu_dcat_ap_2_jsonld + display_name: JSON-LD DCAT-AP 2 type: lod format: jsonld - image_display_url: /images/icons/endpoints/euro_dcat_ap_2.svg + image_display_url: /images/icons/endpoints/eu_dcat_ap.svg endpoint_icon: /images/endpoints/catalog-jsonld-eu.png fa_icon: fa-share-alt - description: RDF DCAT-AP Endpoint for european data portals. - profile: euro_dcat_ap_2 - profile_label: DCAT-AP - version: null + description: RDF DCAT-AP 2.1.1 Endpoint for european data portals. + profile: eu_dcat_ap_2,eu_dcat_ap_scheming + profile_label: DCAT-AP 2 + profile_label_order: 2 + profile_info_url: https://joinup.ec.europa.eu/collection/semic-support-centre/solution/dcat-application-profile-data-portals-europe + version: 2.1.1 + + - name: eu_dcat_ap_3_jsonld + display_name: JSON-LD DCAT-AP 3 + type: lod + format: jsonld + image_display_url: /images/icons/endpoints/eu_dcat_ap.svg + endpoint_icon: /images/endpoints/catalog-jsonld-eu.png + fa_icon: fa-share-alt + description: RDF DCAT-AP 3.0.0 Endpoint for european data portals. + profile: eu_dcat_ap_3,eu_dcat_ap_scheming + profile_label: DCAT-AP 3 + profile_label_order: 2 + profile_info_url: https://joinup.ec.europa.eu/collection/semic-support-centre/solution/dcat-application-profile-data-portals-europe + version: 3.0.0 - - name: spain_dcat_rdf + - name: es_dcat_rdf display_name: RDF NTI-RISP type: lod format: rdf - image_display_url: /images/icons/endpoints/spain_dcat.svg + image_display_url: /images/icons/endpoints/es_dcat.svg endpoint_icon: /images/endpoints/catalog-rdf-es.png fa_icon: fa-share-alt description: RDF NTI-RISP Endpoint for spanish data portals. - profile: spain_dcat + profile: es_dcat profile_label: NTI-RISP - version: null + profile_label_order: 3 + profile_info_url: https://datos.gob.es/es/documentacion/guia-de-aplicacion-de-la-norma-tecnica-de-interoperabilidad-de-reutilizacion-de + version: 1.0 - - name: spain_dcat_jsonld + - name: es_dcat_jsonld display_name: JSON-LD NTI-RISP type: lod format: jsonld - image_display_url: /images/icons/endpoints/spain_dcat.svg + image_display_url: /images/icons/endpoints/es_dcat.svg endpoint_icon: /images/endpoints/catalog-jsonld-es.png fa_icon: fa-share-alt description: JSON-LD NTI-RISP Endpoint for spanish data portals. - profile: spain_dcat + profile: es_dcat profile_label: NTI-RISP - version: null + profile_label_order: 3 + profile_info_url: https://datos.gob.es/es/documentacion/guia-de-aplicacion-de-la-norma-tecnica-de-interoperabilidad-de-reutilizacion-de + version: 1.0 - name: csw_inspire display_name: CSW INSPIRE 2.0.2 @@ -55,8 +91,10 @@ catalog_endpoints: endpoint_icon: /images/endpoints/catalog-csw-eu.png fa_icon: fa-globe description: OGC-INSPIRE Endpoint for spatial metadata. - profile: spain_dcat + profile: csw profile_label: INSPIRE + profile_label_order: 0 + profile_info_url: https://inspire.ec.europa.eu/metadata/6541 version: 2.0.2 - name: csw_inspire @@ -67,8 +105,10 @@ catalog_endpoints: endpoint_icon: /images/endpoints/catalog-csw-eu.png fa_icon: fa-globe description: OGC-INSPIRE Endpoint for spatial metadata. - profile: spain_dcat + profile: csw profile_label: INSPIRE + profile_label_order: 0 + profile_info_url: https://inspire.ec.europa.eu/metadata/6541 version: 3.0.0 - name: sparql @@ -81,7 +121,9 @@ catalog_endpoints: description: SPARQL Endpoint for querying RDF data. profile: sparql profile_label: SPARQL - version: null + profile_label_order: 5 + profile_info_url: https://wwwhttps://www.w3.org/TR/2013/REC-sparql11-protocol-20130321/.w3.org/TR/sparql11-overview/ + version: 1.1 - name: ckan display_name: CKAN API @@ -93,4 +135,6 @@ catalog_endpoints: description: CKAN’s Action API is a powerful RPC-style API. profile: ckan profile_label: CKAN-API + profile_label_order: 4 + profile_info_url: https://docs.ckan.org/en/latest/api/index.html version: 3 \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/IACSData.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/IACSData.es.csv new file mode 100644 index 0000000..a31ac66 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/IACSData.es.csv @@ -0,0 +1,7 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/IACSData/lpis,lpis +http://inspire.ec.europa.eu/metadata-codelist/IACSData/gsaa,gsaa +http://inspire.ec.europa.eu/metadata-codelist/IACSData/iacs,iacs +http://inspire.ec.europa.eu/metadata-codelist/IACSData/referenceParcel,referenceParcel +http://inspire.ec.europa.eu/metadata-codelist/IACSData/agriculturalArea,agriculturalArea +http://inspire.ec.europa.eu/metadata-codelist/IACSData/ecologicalFocusArea,ecologicalFocusArea \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/MaintenanceFrequency.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/MaintenanceFrequency.es.csv new file mode 100644 index 0000000..7541fbd --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/MaintenanceFrequency.es.csv @@ -0,0 +1,13 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/continual,continual +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/daily,daily +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/weekly,weekly +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/fortnightly,fortnightly +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/monthly,monthly +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/quarterly,quarterly +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/biannually,biannually +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/annually,annually +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/asNeeded,asNeeded +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/irregular,irregular +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/notPlanned,notPlanned +http://inspire.ec.europa.eu/metadata-codelist/MaintenanceFrequency/unknown,unknown \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/OnLineDescriptionCode.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/OnLineDescriptionCode.es.csv new file mode 100644 index 0000000..a6dc208 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/OnLineDescriptionCode.es.csv @@ -0,0 +1,3 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/OnLineDescriptionCode/accessPoint,accessPoint +http://inspire.ec.europa.eu/metadata-codelist/OnLineDescriptionCode/endPoint,endPoint \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/PriorityDataset.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/PriorityDataset.es.csv new file mode 100644 index 0000000..b5aa985 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/PriorityDataset.es.csv @@ -0,0 +1,74 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2000-60,dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/RiverBasinDistricts-dir-2000-60,RiverBasinDistricts-dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/RiverBasinDistrictsSubUnits-dir-2000-60,RiverBasinDistrictsSubUnits-dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/WaterBodies-dir-2000-60,WaterBodies-dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/RiverNetwork-dir-2000-60,RiverNetwork-dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ProtectedAreas-dir-2000-60,ProtectedAreas-dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MonitoringStations-dir-2000-60,MonitoringStations-dir-2000-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2002-49,dir-2002-49 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MajorRoadsRailwaysAndAirTransportNetwork-dir-2002-49,MajorRoadsRailwaysAndAirTransportNetwork-dir-2002- +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EnvironmentalNoiseExposure-dir-2002-49,EnvironmentalNoiseExposure-dir-2002-49 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Population-dir-2002-49,Population-dir-2002-49 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-dir-2002-49,Agglomerations-dir-2002-49 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2006-21,dir-2006-21 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/FacilitiesForManagingExtractiveWaste-dir-2006-21,FacilitiesForManagingExtractiveWaste-dir-2006-21 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2006-7,dir-2006-7 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/BathingWaterSites-dir-2006-7,BathingWaterSites-dir-2006-7 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2007-60,dir-2007-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/PreliminaryFloodRiskAssessment-dir-2007-60,PreliminaryFloodRiskAssessment-dir-2007-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ManagementUnits-dir-2007-60,ManagementUnits-dir-2007-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/AreasOfPotentialSignificantFloodRisk-dir-2007-60,AreasOfPotentialSignificantFloodRisk-dir-2007-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/FloodedAreas-dir-2007-60,FloodedAreas-dir-2007-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/FloodRiskZones-dir-2007-60,FloodRiskZones-dir-2007-60 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2008-50,dir-2008-50 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ManagementZonesAndAgglomerations-dir-2008-50,ManagementZonesAndAgglomerations-dir-2008-50 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ModelAreas-dir-2008-50,ModelAreas-dir-2008-50 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MonitoringStations-dir-2008-50,MonitoringStations-dir-2008-50 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MeasurementAndModellingData-dir-2008-50,MeasurementAndModellingData-dir-2008-50 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2008-56,dir-2008-56 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MarineRegionsAndUnits-dir-2008-56,MarineRegionsAndUnits-dir-2008-56 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MonitoringStations-dir-2008-56,MonitoringStations-dir-2008-56 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2009-147,dir-2009-147 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/PanEuropeanBiogeographicalRegions-dir-2009-147,PanEuropeanBiogeographicalRegions-dir-2009-147 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/BirdSpeciesDistributionAndRange-dir-2009-147,BirdSpeciesDistributionAndRange-dir-2009-147 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Natura2000Sites-dir-2009-147,Natura2000Sites-dir-2009-147 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2010-75,dir-2010-75 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/IndustrialSites-EURegistry-dir-2010-75,IndustrialSites-EURegistry-dir-2010-75 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Emissions-dir-2010-75,Emissions-dir-2010-75 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-2012-18,dir-2012-18 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EstablishmentsInvolvingDangerousSubstances-dir-2012-18,EstablishmentsInvolvingDangerousSubstances-dir-201 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-1986-278,dir-1986-278 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/AgriculturalFacilitiesReceivingSludge-dir-1986-278,AgriculturalFacilitiesReceivingSludge-dir-1986-278 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/AgriculturalSitesWhereSludgeIsDeposited-dir-1986-278,AgriculturalSitesWhereSludgeIsDeposited-dir-1986-2 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-1991-271,dir-1991-271 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Agglomerations-dir-1991-271,Agglomerations-dir-1991-271 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/UrbanWasteWaterTreatmentPlants-dir-1991-271,UrbanWasteWaterTreatmentPlants-dir-1991-271 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/DischargePointsToReceivingWaters-dir-1991-271,DischargePointsToReceivingWaters-dir-1991-271 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/SensitiveAreasLessSensitiveAreasAndCatchments-dir-1991-271,SensitiveAreasLessSensitiveAreasAndCatchments-dir- +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-1991-676,dir-1991-676 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MonitoringStations-dir-1991-676,MonitoringStations-dir-1991-676 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/NitratesVulnerableZones-dir-1991-676,NitratesVulnerableZones-dir-1991-676 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-1992-43,dir-1992-43 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Pan-EuropeanBiogeographicalRegions-dir-1992-43,Pan-EuropeanBiogeographicalRegions-dir-1992-43 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/HabitatTypesAndSpeciesDistributionAndRange-dir-1992-43,HabitatTypesAndSpeciesDistributionAndRange-dir-199 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Natura2000Sites-dir-1992-43,Natura2000Sites-dir-1992-43 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-1998-83,dir-1998-83 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/DrinkingWaterSupplyZones-dir-1998-83,DrinkingWaterSupplyZones-dir-1998-83 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/DrinkingWaterAbstractionPoints-dir-1998-83,DrinkingWaterAbstractionPoints-dir-1998-83 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/EEA-AWP,EEA-AWP +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/NationallyDesignatedAreasCDDA,NationallyDesignatedAreasCDDA +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/national-legislation,national-legislation +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/NationalBiogeographicalRegions,NationalBiogeographicalRegions +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/reco-2014-70,reco-2014-70 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/Boreholes-reco-2014-70,Boreholes-reco-2014-70 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/reg-2017-852,reg-2017-852 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/MercuryStorageFacilities-reg-2017-852,MercuryStorageFacilities-reg-2017-852 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/reg-2006-166,reg-2006-166 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/IndustrialSites-EURegistry-reg-2006-166,IndustrialSites-EURegistry-reg-2006-166 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ActualPollutantReleases-reg-2006-166,ActualPollutantReleases-reg-2006-166 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/reg-2014-1143,reg-2014-1143 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/InvasiveAlienSpeciesDistribution-reg-2014-1143,InvasiveAlienSpeciesDistribution-reg-2014-1143 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/dir-1999-31,dir-1999-31 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/ExemptedIslandsAndIsolatedSettlements-dir-1999-31,ExemptedIslandsAndIsolatedSettlements-dir-1999-31 +http://inspire.ec.europa.eu/metadata-codelist/PriorityDataset/LandfillOfWasteSites-dir-1999-31,LandfillOfWasteSites-dir-1999-31 \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/QualityOfServiceCriteria.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/QualityOfServiceCriteria.es.csv new file mode 100644 index 0000000..0dc6b3c --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/QualityOfServiceCriteria.es.csv @@ -0,0 +1,4 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/QualityOfServiceCriteria/availability,availability +http://inspire.ec.europa.eu/metadata-codelist/QualityOfServiceCriteria/performance,performance +http://inspire.ec.europa.eu/metadata-codelist/QualityOfServiceCriteria/capacity,capacity \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/ResourceType.csv b/ckanext/schemingdcat/codelists/inspire/csv/ResourceType.csv new file mode 100644 index 0000000..f0ca35a --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/ResourceType.csv @@ -0,0 +1,4 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/ResourceType/series,series +http://inspire.ec.europa.eu/metadata-codelist/ResourceType/dataset,dataset +http://inspire.ec.europa.eu/metadata-codelist/ResourceType/service,service \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/SpatialDataServiceCategory.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/SpatialDataServiceCategory.es.csv new file mode 100644 index 0000000..2f70571 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/SpatialDataServiceCategory.es.csv @@ -0,0 +1,79 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanInteractionService,humanInteractionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanCatalogueViewer,humanCatalogueViewer +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanGeographicViewer,humanGeographicViewer +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanGeographicSpreadsheetViewer,humanGeographicSpreadsheetViewer +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanServiceEditor,humanServiceEditor +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanChainDefinitionEditor,humanChainDefinitionEditor +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanWorkflowEnactmentManager,humanWorkflowEnactmentManager +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanGeographicFeatureEditor,humanGeographicFeatureEditor +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanGeographicSymbolEditor,humanGeographicSymbolEditor +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanFeatureGeneralizationEditor,humanFeatureGeneralizationEditor +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/humanGeographicDataStructureViewer,humanGeographicDataStructureViewer +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoManagementService,infoManagementService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoFeatureAccessService,infoFeatureAccessService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoMapAccessService,infoMapAccessService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoCoverageAccessService,infoCoverageAccessService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoSensorDescriptionService,infoSensorDescriptionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoProductAccessService,infoProductAccessService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoFeatureTypeService,infoFeatureTypeService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoCatalogueService,infoCatalogueService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoRegistryService,infoRegistryService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoGazetteerService,infoGazetteerService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoOrderHandlingService,infoOrderHandlingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/infoStandingOrderService,infoStandingOrderService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/taskManagementService,taskManagementService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/chainDefinitionService,chainDefinitionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/workflowEnactmentService,workflowEnactmentService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/subscriptionService,subscriptionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialProcessingService,spatialProcessingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialCoordinateConversionService,spatialCoordinateConversionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialCoordinateTransformationService,spatialCoordinateTransformationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialCoverageVectorConversionService,spatialCoverageVectorConversionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialImageCoordinateConversionService,spatialImageCoordinateConversionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialRectificationService,spatialRectificationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialOrthorectificationService,spatialOrthorectificationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialSensorGeometryModelAdjustmentService,spatialSensorGeometryModelAdjustmentService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialImageGeometryModelConversionService,spatialImageGeometryModelConversionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialSubsettingService,spatialSubsettingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialSamplingService,spatialSamplingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialTilingChangeService,spatialTilingChangeService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialDimensionMeasurementService,spatialDimensionMeasurementService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialFeatureManipulationService,spatialFeatureManipulationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialFeatureMatchingService,spatialFeatureMatchingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialFeatureGeneralizationService,spatialFeatureGeneralizationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialRouteDeterminationService,spatialRouteDeterminationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialPositioningService,spatialPositioningService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/spatialProximityAnalysisService,spatialProximityAnalysisService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicProcessingService,thematicProcessingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicGoparameterCalculationService,thematicGoparameterCalculationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicClassificationService,thematicClassificationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicFeatureGeneralizationService,thematicFeatureGeneralizationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicSubsettingService,thematicSubsettingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicSpatialCountingService,thematicSpatialCountingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicChangeDetectionService,thematicChangeDetectionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicGeographicInformationExtractionService,thematicGeographicInformationExtractionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicImageProcessingService,thematicImageProcessingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicReducedResolutionGenerationService,thematicReducedResolutionGenerationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicImageManipulationService,thematicImageManipulationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicImageUnderstandingService,thematicImageUnderstandingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicImageSynthesisService,thematicImageSynthesisService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicMultibandImageManipulationService,thematicMultibandImageManipulationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicObjectDetectionService,thematicObjectDetectionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicGeoparsingService,thematicGeoparsingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/thematicGeocodingService,thematicGeocodingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/temporalProcessingService,temporalProcessingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/temporalReferenceSystemTransformationService,temporalReferenceSystemTransformationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/temporalSubsettingService,temporalSubsettingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/temporalSamplingService,temporalSamplingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/temporalProximityAnalysisService,temporalProximityAnalysisService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/metadataProcessingService,metadataProcessingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/metadataStatisticalCalculationService,metadataStatisticalCalculationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/metadataGeographicAnnotationService,metadataGeographicAnnotationService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comService,comService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comEncodingService,comEncodingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comTransferService,comTransferService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comGeographicCompressionService,comGeographicCompressionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comGeographicFormatConversionService,comGeographicFormatConversionService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comMessagingService,comMessagingService +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceCategory/comRemoteFileAndExecutableManagement,comRemoteFileAndExecutableManagement \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/SpatialDataServiceType.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/SpatialDataServiceType.es.csv new file mode 100644 index 0000000..3ed8d4c --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/SpatialDataServiceType.es.csv @@ -0,0 +1,7 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceType/discovery,discovery +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceType/view,view +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceType/download,download +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceType/transformation,transformation +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceType/invoke,invoke +http://inspire.ec.europa.eu/metadata-codelist/SpatialDataServiceType/other,other \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/SpatialScope.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/SpatialScope.es.csv new file mode 100644 index 0000000..e970546 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/SpatialScope.es.csv @@ -0,0 +1,6 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/national,national +http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/regional,regional +http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/local,local +http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/global,global +http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/european,european \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/TopicCategory.es.csv b/ckanext/schemingdcat/codelists/inspire/csv/TopicCategory.es.csv new file mode 100644 index 0000000..ee4001b --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/TopicCategory.es.csv @@ -0,0 +1,20 @@ +id,label +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/farming,farming +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/biota,biota +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/boundaries,boundaries +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/climatologyMeteorologyAtmosphere,climatologyMeteorologyAtmosphere +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/economy,economy +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/elevation,elevation +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/environment,environment +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/geoscientificInformation,geoscientificInformation +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/health,health +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/imageryBaseMapsEarthCover,imageryBaseMapsEarthCover +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/intelligenceMilitary,intelligenceMilitary +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/inlandWaters,inlandWaters +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/location,location +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/oceans,oceans +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/planningCadastre,planningCadastre +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/society,society +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/structure,structure +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/transportation,transportation +http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/utilitiesCommunication,utilitiesCommunication \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/file-type.csv b/ckanext/schemingdcat/codelists/inspire/csv/file-type.csv new file mode 100644 index 0000000..2e463f3 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/file-type.csv @@ -0,0 +1,287 @@ +id,label,media_type +,3DGEOVOLUMES,http://www.opengis.net/def/interface/ogcapi-3d-geo-volumes +http://publications.europa.eu/resource/authority/file-type/7Z,7Z, +http://publications.europa.eu/resource/authority/file-type/AAB,AAB, +http://publications.europa.eu/resource/authority/file-type/AAC,AAC, +http://publications.europa.eu/resource/authority/file-type/AKN4EU,AKN4EU, +http://publications.europa.eu/resource/authority/file-type/AKN4EU_ZIP,AKN4EU_ZIP, +,AMQP,http://amqp.org +http://publications.europa.eu/resource/authority/file-type/APK,APK, +http://publications.europa.eu/resource/authority/file-type/APPX,APPX, +http://publications.europa.eu/resource/authority/file-type/ARC,ARC, +http://publications.europa.eu/resource/authority/file-type/ARC_GZ,ARC_GZ, +,ARCGIS,urn:x-esri:serviceType:ArcGIS +,ARCIMS,urn:x-esri:serviceType:ArcIMS +http://publications.europa.eu/resource/authority/file-type/ARCINFO_COV,ARCINFO_COV, +http://publications.europa.eu/resource/authority/file-type/ARJ,ARJ, +http://publications.europa.eu/resource/authority/file-type/ATOM,ATOM,http://www.iana.org/assignments/media-types/application/atom+xml +http://publications.europa.eu/resource/authority/file-type/AZW,AZW, +,BIGQUERY,http://cloud.google.com/bigquery/ +http://publications.europa.eu/resource/authority/file-type/BIN,BIN,http://www.iana.org/assignments/media-types/application/octet-stream +http://publications.europa.eu/resource/authority/file-type/BITS,BITS, +http://publications.europa.eu/resource/authority/file-type/BMP,BMP, +http://publications.europa.eu/resource/authority/file-type/BWF,BWF, +http://publications.europa.eu/resource/authority/file-type/BZIP2,BZIP2, +,CDM, +,CDMREMOTE, +,CDMRFEATURE, +,COLLECTIONCAST,http://commons.esipfed.org/ns/discovery/1.2/collectionCast# +http://publications.europa.eu/resource/authority/file-type/CSS,CSS,http://www.iana.org/assignments/media-types/text/css +http://publications.europa.eu/resource/authority/file-type/CSV,CSV,http://www.iana.org/assignments/media-types/text/csv +,CSW,http://www.opengis.net/def/serviceType/ogc/csw +,CT,http://www.opengeospatial.org/standards/ct +http://publications.europa.eu/resource/authority/file-type/DAPK,DAPK, +,DAT,http://dat-data.com +,DATAPACKAGE,http://data.okfn.org/doc/data-package +http://publications.europa.eu/resource/authority/file-type/DBF,DBF,http://www.iana.org/assignments/media-types/application/vnd.dbf +http://publications.europa.eu/resource/authority/file-type/DCR,DCR, +http://publications.europa.eu/resource/authority/file-type/DEB,DEB, +http://publications.europa.eu/resource/authority/file-type/DGN,DGN, +http://publications.europa.eu/resource/authority/file-type/DMG,DMG, +http://publications.europa.eu/resource/authority/file-type/DMP,DMP, +http://publications.europa.eu/resource/authority/file-type/DOC,DOC,http://www.iana.org/assignments/media-types/application/msword +http://publications.europa.eu/resource/authority/file-type/DOCX,DOCX,http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.wordprocessingml.document +,DOWNLOAD, +http://publications.europa.eu/resource/authority/file-type/DTD_SGML,DTD_SGML, +http://publications.europa.eu/resource/authority/file-type/DTD_XML,DTD_XML,http://www.iana.org/assignments/media-types/application/xml-dtd +http://publications.europa.eu/resource/authority/file-type/DWG,DWG,http://www.iana.org/assignments/media-types/image/vnd.dwg +http://publications.europa.eu/resource/authority/file-type/DXF,DXF,http://www.iana.org/assignments/media-types/image/vnd.dxf +http://publications.europa.eu/resource/authority/file-type/E00,E00, +http://publications.europa.eu/resource/authority/file-type/EAR,EAR, +http://publications.europa.eu/resource/authority/file-type/ECW,ECW, +http://publications.europa.eu/resource/authority/file-type/EFORMS_XML,EFORMS_XML, +http://publications.europa.eu/resource/authority/file-type/EPS,EPS, +http://publications.europa.eu/resource/authority/file-type/EPUB,EPUB,http://www.iana.org/assignments/media-types/application/epub+zip +http://publications.europa.eu/resource/authority/file-type/ETSI_XML,ETSI_XML, +http://publications.europa.eu/resource/authority/file-type/EXE,EXE,http://www.iana.org/assignments/media-types/application/vnd.microsoft.portable-executable +,FDSNWS-EVENT,http://service.iris.edu/fdsnws/event/1/ +,FILE, +http://publications.europa.eu/resource/authority/file-type/FMX2,FMX2, +http://publications.europa.eu/resource/authority/file-type/FMX3,FMX3, +http://publications.europa.eu/resource/authority/file-type/FMX4,FMX4, +http://publications.europa.eu/resource/authority/file-type/FMX4_ZIP,FMX4_ZIP, +,FTP,http://tools.ietf.org/html/rfc959 +,FUSION-TABLES,http://google.com/fusiontables +,GCS,http://cloud.google.com/storage/ +http://publications.europa.eu/resource/authority/file-type/GDB,GDB, +,GEO, +,GEOGIGG,http://geogig.org +http://publications.europa.eu/resource/authority/file-type/GEOJSON,GEOJSON,http://www.iana.org/assignments/media-types/application/geo+json +http://publications.europa.eu/resource/authority/file-type/GEOTIFF,GEOTIFF, +http://publications.europa.eu/resource/authority/file-type/GIF,GIF, +,GIT,http://git-scm.com/ +http://publications.europa.eu/resource/authority/file-type/GML,GML,http://www.iana.org/assignments/media-types/application/gml+xml +http://publications.europa.eu/resource/authority/file-type/GMZ,GMZ, +http://publications.europa.eu/resource/authority/file-type/GPKG,GPKG,http://www.iana.org/assignments/media-types/application/geopackage+sqlite3 +http://publications.europa.eu/resource/authority/file-type/GRID,GRID,http://www.iana.org/assignments/media-types/application/vnd.gridmp +http://publications.europa.eu/resource/authority/file-type/GRID_ASCII,GRID_ASCII, +,GRIDDAP,http://coastwatch.pfeg.noaa.gov/erddap/griddap/documentation.html +http://publications.europa.eu/resource/authority/file-type/GTFS,GTFS, +http://publications.europa.eu/resource/authority/file-type/GZIP,GZIP,http://www.iana.org/assignments/media-types/application/gzip +http://publications.europa.eu/resource/authority/file-type/HDF,HDF, +http://publications.europa.eu/resource/authority/file-type/HDT,HDT,http://www.iana.org/assignments/media-types/application/vnd.hdt +http://publications.europa.eu/resource/authority/file-type/HTML,HTML,http://www.iana.org/assignments/media-types/text/html +http://publications.europa.eu/resource/authority/file-type/HTML_SIMPL,HTML_SIMPL, +http://publications.europa.eu/resource/authority/file-type/HTML5,HTML5, +,http,http://www.ietf.org/rfc/rfc2616 +,HYRAX, +http://publications.europa.eu/resource/authority/file-type/ICS,ICS, +,IMAGE,http://iiif.io/api/image +http://publications.europa.eu/resource/authority/file-type/IMMC_XML,IMMC_XML, +http://publications.europa.eu/resource/authority/file-type/INDD,INDD, +,INFORMATION, +,IOT,http://www.ogcnetwork.net/IoT +http://publications.europa.eu/resource/authority/file-type/IPA,IPA, +http://publications.europa.eu/resource/authority/file-type/ISO,ISO,http://www.iana.org/assignments/media-types/application/vnd.efi.iso +http://publications.europa.eu/resource/authority/file-type/ISO_ZIP,ISO_ZIP, +,ISO-USGIN, +,ISO-USGIN-1.3, +,ISO19115, +http://publications.europa.eu/resource/authority/file-type/JAR,JAR, +http://publications.europa.eu/resource/authority/file-type/JATS,JATS, +,JOINS,http://www.opengis.net/def/interface/ogcapi-joins +http://publications.europa.eu/resource/authority/file-type/JPEG,JPEG, +http://publications.europa.eu/resource/authority/file-type/JPEG2000,JPEG2000, +http://publications.europa.eu/resource/authority/file-type/JS,JS,http://www.iana.org/assignments/media-types/application/javascript +http://publications.europa.eu/resource/authority/file-type/JSON,JSON,http://www.iana.org/assignments/media-types/application/json +http://publications.europa.eu/resource/authority/file-type/JSON_LD,JSON_LD,http://www.iana.org/assignments/media-types/application/ld+json +http://publications.europa.eu/resource/authority/file-type/KML,KML,http://www.iana.org/assignments/media-types/application/vnd.google-earth.kml+xml +http://publications.europa.eu/resource/authority/file-type/KMZ,KMZ,http://www.iana.org/assignments/media-types/application/vnd.google-earth.kmz +http://publications.europa.eu/resource/authority/file-type/LAS,LAS,http://www.iana.org/assignments/media-types/application/vnd.las +http://publications.europa.eu/resource/authority/file-type/LAZ,LAZ,http://www.iana.org/assignments/media-types/application/vnd.laszip +http://publications.europa.eu/resource/authority/file-type/LEG,LEG, +http://publications.europa.eu/resource/authority/file-type/LHA,LHA, +,LINK,http://www.w3.org/TR/xlink/ +http://publications.europa.eu/resource/authority/file-type/LPK,LPK, +http://publications.europa.eu/resource/authority/file-type/LZIP,LZIP, +http://publications.europa.eu/resource/authority/file-type/LZMA,LZMA, +http://publications.europa.eu/resource/authority/file-type/LZO,LZO, +http://publications.europa.eu/resource/authority/file-type/MAP_SRVC,MAP, +http://publications.europa.eu/resource/authority/file-type/MAP_PRVW,MAP_PRVW, +http://publications.europa.eu/resource/authority/file-type/MAP_SRVC,MAP_SRVC, +http://publications.europa.eu/resource/authority/file-type/MBOX,MBOX,http://www.iana.org/assignments/media-types/application/mbox +http://publications.europa.eu/resource/authority/file-type/MDB,MDB, +http://publications.europa.eu/resource/authority/file-type/METS,METS,http://www.iana.org/assignments/media-types/application/mets+xml +http://publications.europa.eu/resource/authority/file-type/METS_ZIP,METS_ZIP, +http://publications.europa.eu/resource/authority/file-type/MHTML,MHTML, +http://publications.europa.eu/resource/authority/file-type/MIF_MID,MIF_MID, +http://publications.europa.eu/resource/authority/file-type/MOBI,MOBI,http://www.iana.org/assignments/media-types/application/vnd.amazon.mobi8-ebook +http://publications.europa.eu/resource/authority/file-type/MOP,MOP, +,MOVINGFEATURES,http://www.opengis.net/def/interface/ogcapi-moving-features +http://publications.europa.eu/resource/authority/file-type/MP3,MP3, +http://publications.europa.eu/resource/authority/file-type/MPEG2,MPEG2,http://www.iana.org/assignments/media-types/application/mp4 +http://publications.europa.eu/resource/authority/file-type/MPEG4,MPEG4,http://www.iana.org/assignments/media-types/application/mp4 +http://publications.europa.eu/resource/authority/file-type/MPEG4_AVC,MPEG4_AVC,http://www.iana.org/assignments/media-types/application/mp4 +,MPK,http://esriurl.com/mpk.xml +,MQTT,http://mqtt.org +http://publications.europa.eu/resource/authority/file-type/MRSID,MRSID, +http://publications.europa.eu/resource/authority/file-type/MSG_HTTP,MSG_HTTP, +http://publications.europa.eu/resource/authority/file-type/MSI,MSI, +http://publications.europa.eu/resource/authority/file-type/MXD,MXD, +http://publications.europa.eu/resource/authority/file-type/N3,N3,http://www.iana.org/assignments/media-types/application/n-triples +,NCSS, +http://publications.europa.eu/resource/authority/file-type/NETCDF,NETCDF, +http://publications.europa.eu/resource/authority/file-type/OAPK,OAPK, +http://publications.europa.eu/resource/authority/file-type/OCTET,OCTET,http://www.iana.org/assignments/media-types/application/octet-stream +,ODATA,http://docs.oasis-open.org/odata/odata/v4.0 +http://publications.europa.eu/resource/authority/file-type/ODB,ODB, +http://publications.europa.eu/resource/authority/file-type/ODC,ODC, +http://publications.europa.eu/resource/authority/file-type/ODF,ODF, +http://publications.europa.eu/resource/authority/file-type/ODG,ODG, +http://publications.europa.eu/resource/authority/file-type/ODP,ODP, +http://publications.europa.eu/resource/authority/file-type/ODS,ODS,http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.spreadsheet +http://publications.europa.eu/resource/authority/file-type/ODT,ODT,http://www.iana.org/assignments/media-types/application/vnd.oasis.opendocument.text +,OGCCov,http://www.opengis.net/def/interface/ogcapi-coverages +,OGCDGGS,http://www.opengis.net/def/interface/ogcapi-dggs +,OGCEDR,http://www.opengis.net/def/interface/ogcapi-edr +,OGCFeat,http://www.opengis.net/def/interface/ogcapi-features +,OGCMaps,http://www.opengis.net/def/interface/ogcapi-maps +,OGCProc,http://www.opengis.net/def/interface/ogcapi-processes +,OGCRec,http://www.opengis.net/def/interface/ogcapi-records +,OGCRout,http://www.opengis.net/def/interface/ogcapi-routes +,OGCStyl,http://www.opengis.net/def/interface/ogcapi-styles +,OGCTile,http://www.opengis.net/def/interface/ogcapi-tiles +,OGS,http://www.opengeospatial.org/standards/ols#ogs +,OPENDAD, +,OPENSEARCH1.1,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_URL_template_syntax +,OPENSEARCH1.1:DESCRIPTION,http://www.opensearch.org/Specifications/OpenSearch/1.1#OpenSearch_description_document +,OPS,http://www.opengeospatial.org/standards/ols#ops +,ORDER, +,ORS,http://www.opengeospatial.org/standards/ols#ors +,OSM,http://wiki.openstreetmap.org/wiki/API +,OUS,http://www.opengeospatial.org/standards/ols#ous +http://publications.europa.eu/resource/authority/file-type/OVF,OVF, +,OWC,http://www.opengeospatial.org/standards/owc +http://publications.europa.eu/resource/authority/file-type/OWL,OWL,http://www.iana.org/assignments/media-types/application/rdf+xml +http://publications.europa.eu/resource/authority/file-type/PDF,PDF,http://www.iana.org/assignments/media-types/application/pdf +http://publications.europa.eu/resource/authority/file-type/PDF1X,PDF1X, +http://publications.europa.eu/resource/authority/file-type/PDFA1A,PDFA1A, +http://publications.europa.eu/resource/authority/file-type/PDFA1B,PDFA1B, +http://publications.europa.eu/resource/authority/file-type/PDFA2A,PDFA2A, +http://publications.europa.eu/resource/authority/file-type/PDFA2B,PDFA2B, +http://publications.europa.eu/resource/authority/file-type/PDFA3,PDFA3, +http://publications.europa.eu/resource/authority/file-type/PDFUA,PDFUA, +http://publications.europa.eu/resource/authority/file-type/PDFX,PDFX, +http://publications.europa.eu/resource/authority/file-type/PDFX1A,PDFX1A, +http://publications.europa.eu/resource/authority/file-type/PDFX2A,PDFX2A, +http://publications.europa.eu/resource/authority/file-type/PDFX4,PDFX4, +http://publications.europa.eu/resource/authority/file-type/PL,PL, +http://publications.europa.eu/resource/authority/file-type/PNG,PNG,http://www.iana.org/assignments/media-types/image/png +,POSTGIS, +http://publications.europa.eu/resource/authority/file-type/PPS,PPS, +http://publications.europa.eu/resource/authority/file-type/PPSX,PPSX, +http://publications.europa.eu/resource/authority/file-type/PPT,PPT,http://www.iana.org/assignments/media-types/application/vnd.ms-powerpoint +http://publications.europa.eu/resource/authority/file-type/PPTX,PPTX,http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.presentationml.presentation +,PROTOCOL-BUFFERS,http://developers.google.com/protocol-buffers +http://publications.europa.eu/resource/authority/file-type/PS,PS, +http://publications.europa.eu/resource/authority/file-type/PSD,PSD, +http://publications.europa.eu/resource/authority/file-type/PWP,PWP, +http://publications.europa.eu/resource/authority/file-type/QGS,QGS, +,QUAKEML1.2,http://quakeml.org /xmlns /quakeml/1.2 +http://publications.europa.eu/resource/authority/file-type/RAR,RAR,http://www.iana.org/assignments/media-types/application/vnd.rar +,RASTER, +http://publications.europa.eu/resource/authority/file-type/RDF,RDF,http://www.iana.org/assignments/media-types/application/rdf+xml +http://publications.europa.eu/resource/authority/file-type/RDF_N_QUADS,RDF_N_QUADS, +http://publications.europa.eu/resource/authority/file-type/RDF_N_TRIPLES,RDF_N_TRIPLES,http://www.iana.org/assignments/media-types/application/n-triples +http://publications.europa.eu/resource/authority/file-type/RDF_THRIFT,RDF_THRIFT, +http://publications.europa.eu/resource/authority/file-type/RDF_TRIG,RDF_TRIG, +http://publications.europa.eu/resource/authority/file-type/RDF_TRIX,RDF_TRIX, +http://publications.europa.eu/resource/authority/file-type/RDF_TURTLE,RDF_TURTLE,http://www.iana.org/assignments/media-types/text/turtle +http://publications.europa.eu/resource/authority/file-type/RDF_XML,RDF_XML,http://www.iana.org/assignments/media-types/application/rdf+xml +http://publications.europa.eu/resource/authority/file-type/RDFA,RDFA,http://www.iana.org/assignments/media-types/application/xhtml+xml +http://publications.europa.eu/resource/authority/file-type/REST,REST, +http://publications.europa.eu/resource/authority/file-type/RPM,RPM, +http://publications.europa.eu/resource/authority/file-type/RSS,RSS, +http://publications.europa.eu/resource/authority/file-type/RTF,RTF,http://www.iana.org/assignments/media-types/application/rtf +,S3,http://aws.amazon.com/documentation/s3/ +,SAS,http://www.ogcnetwork.net/SAS +http://publications.europa.eu/resource/authority/file-type/SB3,SB3,http://www.iana.org/assignments/media-types/application/sarif+json +http://publications.europa.eu/resource/authority/file-type/SCHEMA_XML,SCHEMA_XML, +http://publications.europa.eu/resource/authority/file-type/SDMX,SDMX, +,SEARCH, +,SERVICE, +http://publications.europa.eu/resource/authority/file-type/SGML,SGML,http://www.iana.org/assignments/media-types/application/SGML +http://publications.europa.eu/resource/authority/file-type/SHP,SHP,http://www.iana.org/assignments/media-types/application/vnd.shp +http://publications.europa.eu/resource/authority/file-type/SKOS_XML,SKOS_XML, +,SOS,http://www.opengis.net/def/serviceType/ogc/sos +http://publications.europa.eu/resource/authority/file-type/SPARQLQ,SPARQLQ,http://www.iana.org/assignments/media-types/application/sparql-query +http://publications.europa.eu/resource/authority/file-type/SPARQLQRES,SPARQLQRES,http://www.iana.org/assignments/media-types/application/sparql-results+xml +,SPS,http://www.opengeospatial.org/standards/sps +http://publications.europa.eu/resource/authority/file-type/SQL,SQL,http://www.iana.org/assignments/media-types/application/sql +,STAC,http://stacspec.org +http://publications.europa.eu/resource/authority/file-type/STL,STL, +http://publications.europa.eu/resource/authority/file-type/SVG,SVG,http://www.iana.org/assignments/media-types/application/stix+json +http://publications.europa.eu/resource/authority/file-type/SWM,SWM,http://www.iana.org/assignments/media-types/application/swid+xml +http://publications.europa.eu/resource/authority/file-type/TAB,TAB, +http://publications.europa.eu/resource/authority/file-type/TAB_RSTR,TAB_RSTR, +,TABLEDAP,http://coastwatch.pfeg.noaa.gov/erddap/tabledap/documentation.html +http://publications.europa.eu/resource/authority/file-type/TAR,TAR, +http://publications.europa.eu/resource/authority/file-type/TAR_GZ,TAR_GZ,http://www.iana.org/assignments/media-types/application/vnd.cncf.helm.chart.content.v1.tar+gzip +http://publications.europa.eu/resource/authority/file-type/TAR_XZ,TAR_XZ, +,TEMPLATE,http://tools.ietf.org/html/rfc6570 +,THREDDS,http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0 +http://publications.europa.eu/resource/authority/file-type/TIFF,TIFF,http://www.iana.org/assignments/media-types/image/tiff +http://publications.europa.eu/resource/authority/file-type/TIFF_FX,TIFF_FX, +,TILEJSON, +,TMS,http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification +http://publications.europa.eu/resource/authority/file-type/TMX,TMX, +http://publications.europa.eu/resource/authority/file-type/TSV,TSV,http://www.iana.org/assignments/media-types/text/tab-separated-values +http://publications.europa.eu/resource/authority/file-type/RDF_TURTLE,TTL,http://www.iana.org/assignments/media-types/text/turtle +http://publications.europa.eu/resource/authority/file-type/TXT,TXT, +http://publications.europa.eu/resource/authority/file-type/UNGEN,UNGEN, +http://publications.europa.eu/resource/authority/file-type/WAR,WAR, +http://publications.europa.eu/resource/authority/file-type/WARC,WARC, +http://publications.europa.eu/resource/authority/file-type/WARC_GZ,WARC_GZ, +http://publications.europa.eu/resource/authority/file-type/WAV,WAV, +http://publications.europa.eu/resource/authority/file-type/WCS_SRVC,WCS, +http://publications.europa.eu/resource/authority/file-type/WCS_SRVC,WCS_SRVC, +http://publications.europa.eu/resource/authority/file-type/WEBP,WEBP, +http://publications.europa.eu/resource/authority/file-type/WFS_SRVC,WFS,http://www.opengis.net/def/serviceType/ogc/wfs +http://publications.europa.eu/resource/authority/file-type/WFS_SRVC,WFS_SRVC,http://www.opengis.net/def/serviceType/ogc/wfs +,WFS-G,http://www.opengeospatial.org/standards/wfs-g +http://publications.europa.eu/resource/authority/file-type/WIM,WIM, +http://publications.europa.eu/resource/authority/file-type/WMS_SRVC,WMS,http://www.opengis.net/def/serviceType/ogc/wms +http://publications.europa.eu/resource/authority/file-type/WMS_SRVC,WMS_SRVC,http://www.opengis.net/def/serviceType/ogc/wms +,WMS-C,http://www.opengis.net/def/serviceType/ogc/wms +http://publications.europa.eu/resource/authority/file-type/WMTS_SRVC,WMTS,http://www.opengeospatial.org/standards/wmts +http://publications.europa.eu/resource/authority/file-type/WMTS_SRVC,WMTS_SRVC,http://www.opengeospatial.org/standards/wmts +,WNS,http://www.ogcnetwork.net/WNS +http://publications.europa.eu/resource/authority/file-type/WORLD,WORLD, +,WPS,http://www.opengis.net/def/serviceType/ogc/wps +,WSDL,http://www.w3.org/TR/wsdl +http://publications.europa.eu/resource/authority/file-type/XHTML,XHTML, +http://publications.europa.eu/resource/authority/file-type/XHTML_SIMPL,XHTML_SIMPL, +http://publications.europa.eu/resource/authority/file-type/XHTML5,XHTML5, +http://publications.europa.eu/resource/authority/file-type/XLIFF,XLIFF, +http://publications.europa.eu/resource/authority/file-type/XLS,XLS,http://www.iana.org/assignments/media-types/application/vnd.ms-excel +http://publications.europa.eu/resource/authority/file-type/XLSB,XLSB, +http://publications.europa.eu/resource/authority/file-type/XLSM,XLSM, +http://publications.europa.eu/resource/authority/file-type/XLSX,XLSX,http://www.iana.org/assignments/media-types/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +http://publications.europa.eu/resource/authority/file-type/XML,XML,http://www.iana.org/assignments/media-types/text/xml +http://publications.europa.eu/resource/authority/file-type/XSLFO,XSLFO, +http://publications.europa.eu/resource/authority/file-type/XSLT,XSLT,http://www.iana.org/assignments/media-types/application/xslt+xml +http://publications.europa.eu/resource/authority/file-type/XYZ,XYZ, +http://publications.europa.eu/resource/authority/file-type/XZ,XZ, +http://publications.europa.eu/resource/authority/file-type/YAML,YAML, +http://publications.europa.eu/resource/authority/file-type/Z,Z, +http://publications.europa.eu/resource/authority/file-type/ZIP,ZIP,http://www.iana.org/assignments/media-types/application/zip \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/format_es.csv b/ckanext/schemingdcat/codelists/inspire/csv/format_es.csv new file mode 100644 index 0000000..5977bb5 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/format_es.csv @@ -0,0 +1,97 @@ +label,id +API,application/api +ASCII,text/ascii +Atom,application/atom+xml +Calendar,text/calendar +CSV,text/csv +CSW,application/csw +DBF,application/dbf +DGN,image/vnd.dgn +DjVu,image/vnd.djvu +DOC,application/msword +DOCX,application/vnd.openxmlformats-officedocument.wordprocessingml.document +DWG,image/vnd.dwg +DXF,application/dxf +ECMAScript,application/ecmascript +ECW,application/ecw +ELP,application/elp +ePub,application/epub+zip +GDB,x-lml/x-gdb +GeoJSON,application/geo+json +GeoJSON,application/vnd.geo+json +GeoPackage,application/geopackage+sqlite3 +GeoPDF,application/geo+pdf +GeoRSS,text/xml+georss +GML,application/gml+xml +GPX,application/gpx+xml +GZIP,application/gzip +HTML,text/html +HTML,text/html +IMG,application/img +JavaScript,text/javascript +JPG,image/jpeg +JP2,image/jp2 +JSON,application/json +JSON,application/x-json +JSON-LD,application/ld+json +KML,application/vnd.google-earth.kml+xml +KMZ,application/vnd.google-earth.kmz +LAS,application/las +MARC,application/marc +MDB,application/msaccess +MP4,application/mp4 +MPP,application/vmd.ms-project +N3,text/rdf+n3 +NetCDF,application/netcdf +OCTET-STREAM,application/octet-stream +ODP,application/vnd.oasis.opendocument.presentation +ODS,application/vnd.oasis.opendocument.spreadsheet +ODT,application/vnd.oasis.opendocument.text +PC-Axis,text/pc-axis +PDF,application/pdf +PGP,application/pgp-signature +plain,text/plain +PNG,image/png +Postscript,application/postscript +PPT,application/vms.ms-powerpoint +QGIS,application/x-qgis +RAR,application/x-rar-compressed +RASTER,application/vnd.cups-raster +RDF-N3,text/n3 +RDF-Turtle,text/turtle +RDF-XML,application/rdf+xml +RSS,application/rss+xml +RTF,text/rtf +SCORM,application/scorm +SHP,application/x-zipped-shp +SMIL,application/smil+xml +SOAP,application/soap+xml +Solr,application/solr +SPARQL,application/sparql-query +SPARQL-JSON,application/sparql-results+json +SPARQL-XML,application/sparql-results+xml +SubRip,application/srt +SVG,image/svg+xml +TBX,application/x-tbx+xml +TIFF,image/tiff +TMX,application/x-tmx+xml +TSV,text/tab-separated-values +TURTLE,application/x-turtle +vCard-texto,text/vcard +vCard-XML,application/vcard+xml +Visio,application/vnd.visio +VoiceXML,application/voicexml+xml +WCS,text/wcs +WFS,text/wfs +WMS,text/wms +WMS-XML,application/vnd.ogc.wms_xml +XBRL,application/xbrl +XHTML,application/xhtml+xml +XLS,application/vnd.ms-excel +XLSX,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +XML,application/xml +XML,text/xml +XML-APP,application/xml +Z39.50,application/z39.50 +ZIP,application/x-zip-compressed +ZIP,application/zip \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/languages.csv b/ckanext/schemingdcat/codelists/inspire/csv/languages.csv new file mode 100644 index 0000000..c51b7b7 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/languages.csv @@ -0,0 +1,24 @@ +id,label +http://publications.europa.eu/resource/authority/language/ENG,en +http://publications.europa.eu/resource/authority/language/SPA,es +http://publications.europa.eu/resource/authority/language/DEU,de +http://publications.europa.eu/resource/authority/language/FRA,fr +http://publications.europa.eu/resource/authority/language/ITA,it +http://publications.europa.eu/resource/authority/language/POR,pt +http://publications.europa.eu/resource/authority/language/NLD,nl +http://publications.europa.eu/resource/authority/language/SWE,sv +http://publications.europa.eu/resource/authority/language/POL,pl +http://publications.europa.eu/resource/authority/language/DAN,da +http://publications.europa.eu/resource/authority/language/FIN,fi +http://publications.europa.eu/resource/authority/language/EST,et +http://publications.europa.eu/resource/authority/language/LVA,lv +http://publications.europa.eu/resource/authority/language/LTU,lt +http://publications.europa.eu/resource/authority/language/CZE,cs +http://publications.europa.eu/resource/authority/language/SLO,sk +http://publications.europa.eu/resource/authority/language/HUN,hu +http://publications.europa.eu/resource/authority/language/SLV,sl +http://publications.europa.eu/resource/authority/language/BUL,bg +http://publications.europa.eu/resource/authority/language/ROM,ro +http://publications.europa.eu/resource/authority/language/HRV,hr +http://publications.europa.eu/resource/authority/language/MAL,mt +http://publications.europa.eu/resource/authority/language/GRE,el \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/rights.csv b/ckanext/schemingdcat/codelists/inspire/csv/rights.csv new file mode 100644 index 0000000..da69447 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/rights.csv @@ -0,0 +1,7 @@ +label,id +Confidential,http://publications.europa.eu/resource/authority/access-right/CONFIDENTIAL, +Non-public,http://publications.europa.eu/resource/authority/access-right/NON_PUBLIC, +Normal,http://publications.europa.eu/resource/authority/access-right/NORMAL, +Public,http://publications.europa.eu/resource/authority/access-right/PUBLIC +Restricted,http://publications.europa.eu/resource/authority/access-right/RESTRICTED, +Sensitive,http://publications.europa.eu/resource/authority/access-right/SENSITIVE, \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/theme-dcat_ap.csv b/ckanext/schemingdcat/codelists/inspire/csv/theme-dcat_ap.csv new file mode 100644 index 0000000..22846f6 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/theme-dcat_ap.csv @@ -0,0 +1,23 @@ +id,label,dcat_ap +http://datos.gob.es/kos/sector-publico/sector/ciencia-tecnologia,ciencia-tecnologia,http://publications.europa.eu/resource/authority/data-theme/TECH +http://datos.gob.es/kos/sector-publico/sector/comercio,comercio,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/cultura-ocio,cultura-ocio,http://publications.europa.eu/resource/authority/data-theme/EDUC +http://datos.gob.es/kos/sector-publico/sector/demografia,demografia,http://publications.europa.eu/resource/authority/data-theme/SOCI +http://datos.gob.es/kos/sector-publico/sector/deporte,deporte,http://publications.europa.eu/resource/authority/data-theme/EDUC +http://datos.gob.es/kos/sector-publico/sector/economia,economia,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/educacion,educacion,http://publications.europa.eu/resource/authority/data-theme/EDUC +http://datos.gob.es/kos/sector-publico/sector/empleo,empleo,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/energia,energia,http://publications.europa.eu/resource/authority/data-theme/ENER +http://datos.gob.es/kos/sector-publico/sector/hacienda,hacienda,http://publications.europa.eu/resource/authority/data-theme/GOVE +http://datos.gob.es/kos/sector-publico/sector/industria,industria,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/legislacion-justicia,legislacion-justicia,http://publications.europa.eu/resource/authority/data-theme/JUST +http://datos.gob.es/kos/sector-publico/sector/medio-ambiente,medio-ambiente,http://publications.europa.eu/resource/authority/data-theme/ENVI +http://datos.gob.es/kos/sector-publico/sector/medio-rural-pesca,medio-rural-pesca,http://publications.europa.eu/resource/authority/data-theme/AGRI +http://datos.gob.es/kos/sector-publico/sector/salud,salud,http://publications.europa.eu/resource/authority/data-theme/HEAL +http://datos.gob.es/kos/sector-publico/sector/sector-publico,sector-publico,http://publications.europa.eu/resource/authority/data-theme/GOVE +http://datos.gob.es/kos/sector-publico/sector/seguridad,seguridad,http://publications.europa.eu/resource/authority/data-theme/JUST +http://datos.gob.es/kos/sector-publico/sector/sociedad-bienestar,sociedad-bienestar,http://publications.europa.eu/resource/authority/data-theme/SOCI +http://datos.gob.es/kos/sector-publico/sector/transporte,transporte,http://publications.europa.eu/resource/authority/data-theme/TRAN +http://datos.gob.es/kos/sector-publico/sector/turismo,turismo,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/urbanismo-infraestructuras,urbanismo-infraestructuras,http://publications.europa.eu/resource/authority/data-theme/REGI +http://datos.gob.es/kos/sector-publico/sector/vivienda,vivienda,http://publications.europa.eu/resource/authority/data-theme/REGI \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/theme.csv b/ckanext/schemingdcat/codelists/inspire/csv/theme.csv new file mode 100644 index 0000000..989f534 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/theme.csv @@ -0,0 +1,36 @@ +id,label +http://inspire.ec.europa.eu/theme/ad,ad +http://inspire.ec.europa.eu/theme/au,au +http://inspire.ec.europa.eu/theme/rs,rs +http://inspire.ec.europa.eu/theme/gg,gg +http://inspire.ec.europa.eu/theme/cp,cp +http://inspire.ec.europa.eu/theme/gn,gn +http://inspire.ec.europa.eu/theme/hy,hy +http://inspire.ec.europa.eu/theme/ps,ps +http://inspire.ec.europa.eu/theme/tn,tn +http://inspire.ec.europa.eu/theme/el,e +http://inspire.ec.europa.eu/theme/ge,ge +http://inspire.ec.europa.eu/theme/lc,lc +http://inspire.ec.europa.eu/theme/oi,oi +http://inspire.ec.europa.eu/theme/af,af +http://inspire.ec.europa.eu/theme/am,am +http://inspire.ec.europa.eu/theme/ac,ac +http://inspire.ec.europa.eu/theme/br,br +http://inspire.ec.europa.eu/theme/bu,bu +http://inspire.ec.europa.eu/theme/er,er +http://inspire.ec.europa.eu/theme/ef,ef +http://inspire.ec.europa.eu/theme/hb,hb +http://inspire.ec.europa.eu/theme/hh,hh +http://inspire.ec.europa.eu/theme/lu,lu +http://inspire.ec.europa.eu/theme/mr,mr +http://inspire.ec.europa.eu/theme/nz,nz +http://inspire.ec.europa.eu/theme/of,of +http://inspire.ec.europa.eu/theme/pd,pd +http://inspire.ec.europa.eu/theme/pf,pf +http://inspire.ec.europa.eu/theme/sr,sr +http://inspire.ec.europa.eu/theme/so,so +http://inspire.ec.europa.eu/theme/sd,sd +http://inspire.ec.europa.eu/theme/su,su +http://inspire.ec.europa.eu/theme/us,us +http://inspire.ec.europa.eu/theme/mf,mf +http://inspire.ec.europa.eu/theme/ac-mf,ac-mf \ No newline at end of file diff --git a/ckanext/schemingdcat/codelists/inspire/csv/theme_es.csv b/ckanext/schemingdcat/codelists/inspire/csv/theme_es.csv new file mode 100644 index 0000000..a13d067 --- /dev/null +++ b/ckanext/schemingdcat/codelists/inspire/csv/theme_es.csv @@ -0,0 +1,23 @@ +id,label,dcat_ap +http://datos.gob.es/kos/sector-publico/sector/ciencia-tecnologia,Ciencia y tecnología,http://publications.europa.eu/resource/authority/data-theme/TECH +http://datos.gob.es/kos/sector-publico/sector/comercio,Comercio,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/cultura-ocio,Cultura y ocio,http://publications.europa.eu/resource/authority/data-theme/EDUC +http://datos.gob.es/kos/sector-publico/sector/demografia,Demografía,http://publications.europa.eu/resource/authority/data-theme/SOCI +http://datos.gob.es/kos/sector-publico/sector/deporte,Deporte,http://publications.europa.eu/resource/authority/data-theme/EDUC +http://datos.gob.es/kos/sector-publico/sector/economia,Economía,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/educacion,Educación,http://publications.europa.eu/resource/authority/data-theme/EDUC +http://datos.gob.es/kos/sector-publico/sector/empleo,Empleo,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/energia,Energía,http://publications.europa.eu/resource/authority/data-theme/ENER +http://datos.gob.es/kos/sector-publico/sector/hacienda,Hacienda,http://publications.europa.eu/resource/authority/data-theme/GOVE +http://datos.gob.es/kos/sector-publico/sector/industria,Industria,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/legislacion-justicia,Legislación y justicia,http://publications.europa.eu/resource/authority/data-theme/JUST +http://datos.gob.es/kos/sector-publico/sector/medio-ambiente,Medio ambiente,http://publications.europa.eu/resource/authority/data-theme/ENVI +http://datos.gob.es/kos/sector-publico/sector/medio-rural-pesca,Medio Rural,http://publications.europa.eu/resource/authority/data-theme/AGRI +http://datos.gob.es/kos/sector-publico/sector/salud,Salud,http://publications.europa.eu/resource/authority/data-theme/HEAL +http://datos.gob.es/kos/sector-publico/sector/sector-publico,Sector público,http://publications.europa.eu/resource/authority/data-theme/GOVE +http://datos.gob.es/kos/sector-publico/sector/seguridad,Seguridad,http://publications.europa.eu/resource/authority/data-theme/JUST +http://datos.gob.es/kos/sector-publico/sector/sociedad-bienestar,Sociedad y bienestar,http://publications.europa.eu/resource/authority/data-theme/SOCI +http://datos.gob.es/kos/sector-publico/sector/transporte,Transporte,http://publications.europa.eu/resource/authority/data-theme/TRAN +http://datos.gob.es/kos/sector-publico/sector/turismo,Turismo,http://publications.europa.eu/resource/authority/data-theme/ECON +http://datos.gob.es/kos/sector-publico/sector/urbanismo-infraestructuras,Urbanismo e infraestructuras,http://publications.europa.eu/resource/authority/data-theme/REGI +http://datos.gob.es/kos/sector-publico/sector/vivienda,Vivienda,http://publications.europa.eu/resource/authority/data-theme/REGI \ No newline at end of file diff --git a/ckanext/schemingdcat/config.py b/ckanext/schemingdcat/config.py index 6692cc4..d68a003 100644 --- a/ckanext/schemingdcat/config.py +++ b/ckanext/schemingdcat/config.py @@ -5,8 +5,6 @@ default_facet_operator = 'OR' icons_dir = 'images/icons' default_locale = 'en' -organization_custom_facets = False -group_custom_facets = False debug = False linkeddata_links = None geometadata_links = None @@ -18,10 +16,36 @@ show_metadata_templates_toolbar = True metadata_templates_search_identifier = 'schemingdcat_xls-template' mimetype_base_uri = 'http://www.iana.org/assignments/media-types' +root_path = None slugify_pat = re.compile('[^a-zA-Z0-9]') # schemingdcat field_mapping extras prefix, e.g. custom_field = extras_custom_field field_mapping_extras_prefix = 'extras' field_mapping_extras_prefix_symbol = '_' +# dict of local schemas dicts +schemas = {} +form_tabs_allowed = True +form_tabs = {} +form_tabs_grouping = None +form_groups = {} +# About stats +open_data_statistics = { + 'dataset_count': 0, + 'distribution_count': 0, + 'group_count': 0, + 'organization_count': 0, + 'tag_count': 0, + 'spatial_dataset_count': 0, + 'endpoints_count': 0, + 'themes_stats': [] + } +# Custom facets +dataset_custom_facets = {} +organization_custom_facets = False +group_custom_facets = False +# Footer info +social_github = 'https://github.com/mjanez/ckanext-schemingdcat' +social_x = 'https://x.com/ckanproject' +social_linkedin = 'https://www.linkedin.com/company/ckanproject' # Default DCAT metadata configuration OGC2CKAN_HARVESTER_MD_CONFIG = { @@ -149,6 +173,12 @@ # loose definition of BCP47-like strings BCP_47_LANGUAGE = u'^[a-z]{2,8}(-[0-9a-zA-Z]{1,8})*$' +INSPIRE_DCAT_TYPES = [ + 'http://inspire.ec.europa.eu/metadata-codelist/ResourceType/dataset', + 'http://inspire.ec.europa.eu/metadata-codelist/ResourceType/series', + 'http://inspire.ec.europa.eu/metadata-codelist/ResourceType/service' +] + DATASET_DEFAULT_SCHEMA = [ 'id', 'type', @@ -286,5 +316,4 @@ 'resource': ['url', 'availability', 'mimetype', 'status', 'resource_relation', 'license', 'rights', 'conforms_to', 'reference_system'] } - EMAIL_FIELD_NAMES = ['publisher_email', 'maintainer_email', 'author_email', ] \ No newline at end of file diff --git a/ckanext/schemingdcat/faceted.py b/ckanext/schemingdcat/faceted.py index 12ab9af..a8efd45 100644 --- a/ckanext/schemingdcat/faceted.py +++ b/ckanext/schemingdcat/faceted.py @@ -1,8 +1,13 @@ +import logging +import json + import ckan.plugins as plugins from ckan.common import request + import ckanext.schemingdcat.config as sdct_config -from ckanext.schemingdcat.utils import get_facets_dict -import logging +from ckanext.schemingdcat.helpers import schemingdcat_get_current_lang +import ckanext.schemingdcat.utils as utils +from ckanext.schemingdcat.utils import deprecated log = logging.getLogger(__name__) @@ -32,18 +37,23 @@ def dataset_facets(self, else: return facets_dict - def _custom_facets(self, - facets_dict, - package_type): - - lang_code = request.environ['CKAN_LANG'] - + def _custom_facets(self, facets_dict, package_type): + lang_code = schemingdcat_get_current_lang() + + # Initialize cache dictionary if it does not exist + if not hasattr(sdct_config, 'dataset_custom_facets'): + sdct_config.dataset_custom_facets = {} + + # Check if we already cached the results for the current language + if lang_code in sdct_config.dataset_custom_facets: + return sdct_config.dataset_custom_facets[lang_code] + _facets_dict = {} for facet in self.facet_list: # Look for the field label in the scheming file. # If it's not there, use the default dictionary provided - scheming_item = get_facets_dict().get(facet) - + scheming_item = utils.get_facets_dict().get(facet) + if scheming_item: # Retrieve the corresponding label for the used language _facets_dict[facet] = scheming_item.get(lang_code) @@ -57,17 +67,16 @@ def _custom_facets(self, else: log.warning( "Unable to find a valid label for the field '%s' when faceting" % facet) - + if not _facets_dict[facet]: _facets_dict[facet] = plugins.toolkit._(facet) - + else: _facets_dict[facet] = plugins.toolkit._(facets_dict.get(facet)) - - # tag_key = 'tags_' + lang_code - # facets_dict[tag_key] = plugins.toolkit._('Tag') - #FIXME: FOR COMMON TAG FACET - #log.debug("dataset_facets._facets_dict: {0}".format(_facets_dict)) + + # Cache the results for the current language + sdct_config.dataset_custom_facets[lang_code] = _facets_dict + return _facets_dict def group_facets(self, diff --git a/ckanext/schemingdcat/harvesters/base.py b/ckanext/schemingdcat/harvesters/base.py index 2861bea..f0feb20 100644 --- a/ckanext/schemingdcat/harvesters/base.py +++ b/ckanext/schemingdcat/harvesters/base.py @@ -536,6 +536,7 @@ def get_extra_value(extras, key): def apply_field_mapping(d, mapping): new_dict = {} + #TODO: If not field_mapping, items() fails. for local_field, remote_info in mapping.items(): if 'field_name' in remote_info: remote_field = remote_info['field_name'] @@ -1107,8 +1108,11 @@ def _set_translated_fields(self, package_dict): translated_fields["dataset_fields"].append(local_field_name) if isinstance(remote_field_name, dict): + local_field_value = package_dict.get(local_field_name, {}) + if not isinstance(local_field_value, dict): + local_field_value = {} package_dict[local_field_name] = { - lang: package_dict.get(name, package_dict.get(local_field_name, {}).get(lang)) + lang: package_dict.get(name, local_field_value.get(lang)) for lang, name in remote_field_name.items() } if local_field_name.endswith('_translated'): diff --git a/ckanext/schemingdcat/harvesters/ckan.py b/ckanext/schemingdcat/harvesters/ckan.py index de1b192..6a3d6e9 100644 --- a/ckanext/schemingdcat/harvesters/ckan.py +++ b/ckanext/schemingdcat/harvesters/ckan.py @@ -106,11 +106,12 @@ def validate_config(self, config): f'schema should be one of: {", ".join(self._supported_schemas)}. Current dataset schema: {self._local_schema_name}' ) else: - raise ValueError( - f"Config schema should match the local schema: '{self._local_schema_name}'. " - f"Check the remote schema with CKAN API: {{ckan_site_url}}/api/3/action/scheming_dataset_schema_show?type=dataset, " - f"or specify the local schema, and the harvester will try to map the fields." - ) + if self._local_schema_name.lower().strip() != schema.lower().strip(): + raise ValueError( + f"Config 'schema': {schema} should match the local schema: '{self._local_schema_name}'. " + f"Check the remote schema with CKAN API: {{ckan_site_url}}/api/3/action/scheming_dataset_schema_show?type=dataset, " + f"or specify the local schema '{self._local_schema_name}', and the harvester will try to map the fields." + ) config = json.dumps({**config_obj, "schema": schema.lower().strip()}) @@ -124,6 +125,18 @@ def validate_config(self, config): ): config = json.dumps({**config_obj, "allow_harvest_datasets": False}) + # Check if 'allow_private_datasets' is not in the config_obj or is not a boolean + if "allow_private_datasets" in config_obj: + if "api_key" in config_obj: + if not isinstance(config_obj["allow_private_datasets"], bool): + config = json.dumps({**config_obj, "allow_private_datasets": False}) + else: + raise ValueError( + "'api_key' is needed to using 'allow_private_datasets'" + ) + else: + config = json.dumps({**config_obj, "allow_private_datasets": False}) + # Check remote_orgs and remote_groups == only_local, if not, put # remote_orgs and remote_groups to only_local if ( @@ -376,7 +389,12 @@ def _search_for_datasets(self, remote_ckan_base_url, fq_terms=None): # they will harvested the next time anyway. When datasets are added, # we are at risk of seeing datasets twice in the paging, so we detect # and remove any duplicates. + params["include_private"] = False params["sort"] = "id asc" + + if self.config.get("allow_private_datasets", False): + params["include_private"] = True + if fq_terms: params["fq"] = " ".join(fq_terms) diff --git a/ckanext/schemingdcat/helpers.py b/ckanext/schemingdcat/helpers.py index c7dc10b..4e8dd1d 100644 --- a/ckanext/schemingdcat/helpers.py +++ b/ckanext/schemingdcat/helpers.py @@ -1,22 +1,24 @@ -from ckan.common import json, c, request, is_flask_request -from ckan.lib import helpers as ckan_helpers -import ckan.logic as logic -from ckan import model -from ckan.lib.i18n import get_available_locales, get_lang -import ckan.plugins as p import six import re import yaml +from collections import defaultdict +import json +from typing import Dict, List, Union from yaml.loader import SafeLoader from pathlib import Path from functools import lru_cache import datetime -import typing -from urllib.parse import urlparse +from urllib.parse import urlparse, unquote from urllib.error import URLError - from six.moves.urllib.parse import urlencode +from ckan.common import json, c, request +from ckan.lib import helpers as ckan_helpers +import ckan.logic as logic +from ckan import model +from ckan.lib.i18n import get_available_locales, get_lang +import ckan.plugins as p + from ckanext.scheming.helpers import ( scheming_choices_label, scheming_language_text, @@ -35,7 +37,7 @@ from ckanext.schemingdcat.utils import ( get_facets_dict, public_file_exists, - public_dir_exists, + public_dir_exists ) from ckanext.dcat.utils import CONTENT_TYPES, get_endpoint from ckanext.fluent.validators import LANG_SUFFIX @@ -47,14 +49,25 @@ prettify_cache = {} DEFAULT_LANG = None -@lru_cache(maxsize=None) +@lru_cache(maxsize=16) def get_scheming_dataset_schemas(): """ - Retrieves the dataset schemas using the scheming_dataset_schemas function. - Caches the result using the LRU cache decorator for efficient retrieval. - """ - return scheming_dataset_schemas() + Fetches the dataset schemas using the scheming_dataset_schemas function. + + This function attempts to retrieve the dataset schemas. If a KeyError is encountered, + it logs the error and returns an empty dictionary. + + Returns: + dict: The dataset schemas if successfully retrieved, otherwise an empty dictionary. + Raises: + KeyError: If there is an issue accessing the dataset schemas. + """ + try: + return scheming_dataset_schemas() + except KeyError as e: + log.error('KeyError encountered while fetching dataset schemas: %s', e) + return {} def helper(fn): """Collect helper functions into the ckanext.schemingdcat.all_helpers dictionary. @@ -72,16 +85,43 @@ def helper(fn): @helper def schemingdcat_get_schema_names(): """ - Get the names of all the schemas defined for the Scheming DCAT extension. + Get the `schema_name` of all the schemas loaded. Returns: list: A list of schema names. """ - schemas = get_scheming_dataset_schemas() + return [schema["schema_name"] for schema in sdct_config.schemas.values()] - return [schema["schema_name"] for schema in schemas.values()] +@helper +def schemingdcat_get_schema_dataset_types(): + """ + Get the `dataset_type` of all the schemas loaded. + + Returns: + list: A list of schema names. + """ + return [schema["dataset_type"] for schema in sdct_config.schemas.values()] +@helper +def get_facet_items_with_deserialized_names(facet_items): + import json + for item in facet_items: + try: + # Verificar si las cadenas no están vacías antes de deserializar + if item['name'] and item['display_name']: + names = json.loads(item['name']) + display_names = json.loads(item['display_name']) + + # Combinar las listas + item['combined'] = list(zip(names, display_names)) + else: + item['combined'] = [] + except json.JSONDecodeError: + item['combined'] = [] + + return facet_items + @helper def schemingdcat_default_facet_search_operator(): """Return the default facet search operator: AND/OR. @@ -139,6 +179,25 @@ def schemingdcat_organization_name(org_id): ) return org_name +@helper +def schemingdcat_default_organization_name(): + """Return the name of the first available organization as a default. + + Returns: + str: The name of the first available organization, or None if no organizations are available. + """ + default_org_name = None + try: + organizations = ckan_helpers.organizations_available() + if organizations: + default_org_name = organizations[0]["name"] + else: + log.warning("No organizations available to set as default.") + except Exception as e: + log.error( + "Exception while trying to find the default organization name: {0}".format(e) + ) + return default_org_name @helper def schemingdcat_get_facet_label(facet): @@ -166,84 +225,108 @@ def schemingdcat_get_facet_items_dict( match each facet item). Reads the complete list of facet items for the given facet from - c.search_facets, and filters out the facet items that the user has already + search_facets, and filters out the facet items that the user has already selected. List of facet items are ordered acording the faccet_sort parameter Arguments: facet -- the name of the facet to filter. - search_facets -- dict with search facets(c.search_facets in Pylons) + search_facets -- dict with search facets in Flask (c.search_facets in Pylons) limit -- the max. number of facet items to return. exclude_active -- only return unselected facets. scheming_choices -- scheming choices to use to get label from value. """ - # log.debug("Returning facets for: {0}".format(facet)) + #log.debug("Returning facets for: {0}".format(facet)) order = "default" items = [] + seen_items = set() search_facets = search_facets or getattr(c, "search_facets", None) - + #log.debug("search_facets RAW: {0}".format(search_facets)) + if ( - search_facets - and isinstance(search_facets, dict) - and search_facets.get(facet, {}).get("items") - ): - for facet_item in search_facets.get(facet)["items"]: - if scheming_choices: - facet_item["label"] = scheming_choices_label( - scheming_choices, facet_item["name"] + search_facets + and isinstance(search_facets, dict) + and search_facets.get(facet, {}).get("items") + ): + for facet_item in search_facets.get(facet)["items"]: + try: + names = [facet_item["name"]] + display_names = [facet_item["display_name"]] + labels = [facet_item.get("label", facet_item["display_name"])] + except (ValueError, SyntaxError) as e: + log.error("Error parsing facet_item: {0}".format(e)) + continue + + # Make sure labels are the same size as names and display_names. + if len(labels) != len(names): + labels = display_names + + for name, display_name, label in zip(names, display_names, labels): + item = { + "name": name, + "display_name": display_name, + "count": facet_item["count"], + "label": label + } + + if scheming_choices: + item["label"] = scheming_choices_label( + scheming_choices, item["name"] + ) + else: + item["label"] = item["display_name"] + + if not len(item["name"].strip()): + log.debug("Skipping facet_item with empty name") + continue + + # Avoid duplicates + item_key = (item["name"], item["display_name"], item["label"]) + if item_key in seen_items: + continue + seen_items.add(item_key) + + params_items = request.args.items(multi=True) + + if (facet, item["name"]) not in params_items: + items.append(dict(active=False, **item)) + elif not exclude_active: + items.append(dict(active=True, **item)) + + order_lst = request.args.getlist("_%s_sort" % facet) + if len(order_lst): + order = order_lst[0] + log.debug("order: {0}".format(order)) + + # Sort descending by count and ascending by case-sensitive display name + sorts = { + "name": ("label", False), + "name_r": ("label", True), + "count": ("count", False), + "count_r": ("count", True), + } + if sorts.get(order): + items.sort( + key=lambda it: (it[sorts.get(order)[0]]), reverse=sorts.get(order)[1] ) else: - facet_item["label"] = facet_item["display_name"] - - if not len(facet_item["name"].strip()): - continue - - params_items = ( - request.params.items(multi=True) - if is_flask_request() - else request.params.items() - ) - - if not (facet, facet_item["name"]) in params_items: - items.append(dict(active=False, **facet_item)) - elif not exclude_active: - items.append(dict(active=True, **facet_item)) - - # log.debug("params: {0}:{1}".format( - # facet,request.params.getlist("_%s_sort" % facet))) - order_lst = request.params.getlist("_%s_sort" % facet) - if len(order_lst): - order = order_lst[0] - # Sort descendingly by count and ascendingly by case-sensitive display name - # items.sort(key=lambda it: (-it['count'], it['display_name'].lower())) - sorts = { - "name": ("label", False), - "name_r": ("label", True), - "count": ("count", False), - "count_r": ("count", True), - } - if sorts.get(order): - items.sort( - key=lambda it: (it[sorts.get(order)[0]]), reverse=sorts.get(order)[1] - ) - else: - items.sort(key=lambda it: (-it["count"], it["label"].lower())) - - if hasattr(c, "search_facets_limits"): - if c.search_facets_limits and limit is None: - limit = c.search_facets_limits.get(facet) - # zero treated as infinite for hysterical raisins - if limit is not None and limit > 0: - return items[:limit] + items.sort(key=lambda it: (-it["count"], it["label"].lower())) + + if hasattr(c, "search_facets_limits"): + if c.search_facets_limits and limit is None: + limit = c.search_facets_limits.get(facet) + + # zero treated as infinite for hysterical raisins + if limit is not None and limit > 0: + return items[:limit] return items - @helper def schemingdcat_new_order_url(facet_name, order_concept, extras=None): """Return a URL with the order parameter for the given facet and concept to use. @@ -260,7 +343,7 @@ def schemingdcat_new_order_url(facet_name, order_concept, extras=None): """ old_order = None order_param = "_%s_sort" % facet_name - order_lst = request.params.getlist(order_param) + order_lst = request.args.getlist(order_param) if not extras: extras = {} @@ -278,11 +361,8 @@ def schemingdcat_new_order_url(facet_name, order_concept, extras=None): new_order = order_mapping.get(order_concept, {}).get(old_order) - params_items = ( - request.params.items(multi=True) - if is_flask_request() - else request.params.items() - ) + params_items = request.args.items(multi=True) + params_nopage = [(k, v) for k, v in params_items if k != order_param] if new_order: @@ -293,6 +373,41 @@ def schemingdcat_new_order_url(facet_name, order_concept, extras=None): return url +@helper +def schemingdcat_get_open_data_statistics(): + """ + Retrieves Open Data portal statistics including counts of datasets, distributions, groups, organizations, tags, spatial datasets, and endpoints. + + Returns: + dict: A dictionary containing the counts of various site elements. + """ + return sdct_config.open_data_statistics + +@helper +def schemingdcat_get_social_links(platform=None): + """ + Retrieves social media links for GitHub, LinkedIn, and X from the configuration. + + Args: + platform (str, optional): The specific platform to retrieve the link for. + Can be 'github', 'linkedin', or 'x'. + If None, returns a dictionary with all links. + + Returns: + dict or str: A dictionary containing the social media links for GitHub, LinkedIn, and X, + or a single link if a platform is specified. + """ + social_links = { + 'github': sdct_config.social_github, + 'linkedin': sdct_config.social_linkedin, + 'x': sdct_config.social_x + } + + if platform: + return social_links.get(platform.lower(), None) + + return social_links + @helper def schemingdcat_get_facet_list_limit(): """ @@ -351,7 +466,37 @@ def schemingdcat_get_default_icon(field): """ if "default_icon" in field: return field["default_icon"] - + +@helper +def schemingdcat_get_inspire_dcat_types(): + """ + Returns the configuration value for INSPIRE DCAT types. + + This function retrieves the configuration value that specifies the INSPIRE + DCAT types. These types are used to categorize datasets according to the + INSPIRE directive. The function returns the value of the configuration + setting `INSPIRE_DCAT_TYPES`. + + Returns: + list: A list of strings representing the INSPIRE DCAT types. + """ + return sdct_config.INSPIRE_DCAT_TYPES + +@helper +def schemingdcat_get_dataset_custom_facets(): + """ + Returns the custom facets for datasets from the configuration. + + This function retrieves the custom facets for datasets as specified in the + configuration. These custom facets are used to categorize datasets according + to specific criteria defined in the configuration. The function returns the + value of the configuration setting `dataset_custom_facets`. + + Returns: + list: A list of strings representing the custom facets for datasets. + """ + return sdct_config.dataset_custom_facets + @helper def schemingdcat_get_default_package_item_icon(): """ @@ -508,7 +653,7 @@ def schemingdcat_get_choice_item(field, value): dict: The whole option item in scheming, or None if not found. """ if field and ("choices" in field): - # log.debug("Searching: {0} en {1}".format(value,field['choices'])) + #log.debug("Searching: {0} en {1}".format(value,field['choices'])) for choice in field["choices"]: if choice["value"] == value: return choice @@ -604,6 +749,19 @@ def schemingdcat_prettify_url(url): except (TypeError, AttributeError): return url +@helper +def schemingdcat_url_unquote(url): + """ + Decodes a URL, replacing %xx escapes with their single-character equivalent. + + Args: + url (str): The URL to decode. + + Returns: + str: The decoded URL. + """ + return unquote(url) + @helper def schemingdcat_prettify_url_name(url): """ @@ -618,6 +776,10 @@ def schemingdcat_prettify_url_name(url): if url is None: return url + # Convert url to str if it is bytes + if isinstance(url, bytes): + url = url.decode('utf-8') + if url in prettify_cache: return prettify_cache[url] @@ -739,6 +901,8 @@ def schemingdcat_get_catalog_endpoints(): "type": item["type"], "profile": item["profile"], "profile_label": item["profile_label"], + "profile_label_order": item["profile_label_order"], + "profile_info_url": item["profile_info_url"], "endpoint": get_endpoint("catalog") if item.get("type").lower() == "lod" else csw_uri.format(version=item["version"]) @@ -911,8 +1075,51 @@ def parse_json(value, default_value=None): return default_value return value +@helper +def get_root_path(): + """ + Retrieve the root path from the CKAN configuration, removing the '{{LANG}}' placeholder if present. + + This function fetches the 'ckan.root_path' configuration setting and removes the '/{{LANG}}' + placeholder if it exists in the path. + + Returns: + str: The root path with the '{{LANG}}' placeholder removed if it was present. + """ + root_path = p.toolkit.config.get('ckan.root_path') + + # Removes the '{{LANG}}' part if present in the root_path + if root_path and '{{LANG}}' in root_path: + root_path = root_path.replace('/{{LANG}}', '') + + return root_path + +@helper +def get_langs(): + """ + Retrieve the list of language priorities from the CKAN configuration. + + This function fetches the 'ckan.locales_offered' configuration setting, + splits it by spaces, and returns the resulting list of language codes. + + Returns: + list: A list of language codes as strings. + """ + language_priorities = p.toolkit.config.get('ckan.locales_offered', '').split() + return language_priorities + @helper def schemingdcat_get_default_lang(): + """ + Retrieve the default language for the CKAN instance. + + This function checks if the global variable `DEFAULT_LANG` is set. If not, + it fetches the default language from the CKAN configuration using the + 'ckan.locale_default' setting. If the setting is not found, it defaults to 'en'. + + Returns: + str: The default language code. + """ global DEFAULT_LANG if DEFAULT_LANG is None: DEFAULT_LANG = p.toolkit.config.get("ckan.locale_default", "en") @@ -1183,7 +1390,7 @@ def schemingdcat_parse_localised_date(date_=None): else: return date_.strftime('%Y-%m-%d') -@lru_cache(maxsize=None) +@lru_cache(maxsize=16) @helper def schemingdcat_get_dataset_schema(schema_type="dataset"): """ @@ -1199,6 +1406,23 @@ def schemingdcat_get_dataset_schema(schema_type="dataset"): {}, {"type": schema_type} ) +@lru_cache(maxsize=100) +@helper +def schemingdcat_get_cached_schema(dataset_type='dataset'): + """ + Retrieve the cached schema for a given dataset type. + + Args: + dataset_type (str, optional): The type of schema to retrieve. Defaults to 'dataset'. + + Returns: + dict: The schema of the dataset instance. + """ + if sdct_config.schemas is None: + raise ValueError("sdct_config.schemas is not initialized") + + return sdct_config.schemas.get(dataset_type, {}) + @helper def schemingdcat_get_schema_form_groups(entity_type=None, object_type=None, schema=None): """ @@ -1218,7 +1442,7 @@ def schemingdcat_get_schema_form_groups(entity_type=None, object_type=None, sche # Vocabs @helper -def get_inspire_themes(*args, **kwargs) -> typing.List[typing.Dict[str, str]]: +def get_inspire_themes(*args, **kwargs) -> List[Dict[str, str]]: log.debug(f"inside get_inspire_themes {args=} {kwargs=}") try: inspire_themes = p.toolkit.get_action("tag_list")( @@ -1314,7 +1538,55 @@ def get_spatial_datasets(count=10): return result['results'] -@lru_cache(maxsize=None) +@helper +def get_theme_datasets(field='theme', count=10): + """ + This helper function retrieves a specified number of featured datasets from the CKAN instance. + It uses the 'package_search' action of the CKAN logic layer to perform a search with specific parameters. + + Parameters: + field (str): The field to search for in the dataset extras. Default is 'theme'. + count (int): The number of featured datasets to retrieve. Default is 10. + + Returns: + list: A list of unique values from the specified field in the featured datasets. + """ + search_dict = { + 'fl': 'extras_' + field, + 'rows': count + } + context = {'model': model, 'session': model.Session} + result = logic.get_action('package_search')(context, search_dict) + + return result['results'] + +@lru_cache(maxsize=16) +@helper +def get_unique_themes(): + """ + Retrieves unique themes from the dataset extras field specified by the default package item icon. + + This helper function uses the `get_theme_datasets` function to fetch datasets and then extracts + unique values from the specified field. The results are cached to improve performance. + + Returns: + list: A list of unique themes extracted from the specified field in the dataset extras. + """ + field_name = schemingdcat_get_default_package_item_icon() + themes = get_theme_datasets(field_name) + + # Use a set to store unique values + unique_values = set() + for dataset in themes: + value = dataset.get(field_name) + if value: + # Parse the JSON string and add each value to the set + unique_values.update(json.loads(value)) + + # Return the unique values as a list + return list(unique_values) + +@lru_cache(maxsize=16) @helper def get_header_endpoint_url(endpoint, site_protocol_and_host): url_for = ckan_helpers.url_for @@ -1349,4 +1621,190 @@ def schemingdcat_check_valid_url(url): result = urlparse(url) return all([result.scheme, result.netloc]) except ValueError: - return False \ No newline at end of file + return False + +# schemingdcat form tabs +@helper +def schemingdcat_get_form_tabs(): + """ + """ + return sdct_config.form_tabs + +@helper +def schemingdcat_get_form_groups(): + """ + """ + return sdct_config.form_groups + +@helper +def schemingdcat_get_dataset_type_form_tabs(dataset_type='dataset'): + """ + """ + if sdct_config.form_tabs: + form_tabs = sdct_config.form_tabs[dataset_type] + else: + log.warning('sdct_config.form_tabs is None') + form_tabs = [] + return form_tabs + +@helper +def schemingdcat_get_dataset_type_form_groups(dataset_type='dataset'): + """ + """ + if sdct_config.form_groups: + form_groups = sdct_config.form_groups[dataset_type] + else: + log.warning('sdct_config.form_groups is None') + form_groups = [] + return form_groups + +@helper +def schemingdcat_form_tabs_allowed(): + """ + Returns a boolean value indicating whether form tabs are allowed in the current configuration. + + Returns: + bool: True if form tabs are allowed, False otherwise. + """ + return sdct_config.form_tabs_allowed + +@helper +def schemingdcat_get_required_form_groups(schema, tab_type='dataset_fields'): + required_form_groups = {} + fields = schema.get(tab_type, {}) + + for field in fields: + if field.get('required'): + form_group_id = field.get('form_group_id') + if form_group_id: + required_form_groups[form_group_id] = True + + return required_form_groups + +@helper +def schemingdcat_form_tabs_grouping(schema, tab_type='dataset_fields', schema_tabs_prop='schema_form_tabs', dataset_type='dataset'): + """ + Generates a list of dictionaries containing information about form tabs, including their labels and fields. + Ensures that form_tab names are unique and that each tab has at least one label. + + Args: + schema (dict): A dictionary containing the schema definition with a key 'schema_form_tabs'. + tab_type (str): The type of tabs to filter by. Defaults to 'dataset_fields'. + dataset_type (str): The type of dataset to filter by. Defaults to 'dataset'. + + Returns: + list: A list of dictionaries with tab information, including labels and fields, filtered by the specified type. + """ + if sdct_config.form_tabs_grouping is not None and tab_type in sdct_config.form_tabs_grouping: + return sdct_config.form_tabs_grouping[tab_type] + else: + form_groups = {} + for category in sdct_config.form_groups.values(): + form_groups.update({group['form_group_id']: group for group in category}) + + tabs = [ + tab for tab in schema.get(schema_tabs_prop, []) + if tab.get('tab_type') == tab_type + ] + + required_form_groups = schemingdcat_get_required_form_groups(schema, tab_type) + + for tab in tabs: + form_group_ids = tab.get('form_group_id') + if isinstance(form_group_ids, list): + tab['form_group_id'] = [form_groups[form_group_id] for form_group_id in form_group_ids if form_group_id in form_groups] + tab['required_form_group_id'] = [form_group_id for form_group_id in form_group_ids if form_group_id in required_form_groups] + else: + if form_group_ids in form_groups: + tab['form_group_id'] = form_groups[form_group_ids] + if form_group_ids in required_form_groups: + tab['required_form_group_id'] = form_group_ids + + if sdct_config.form_tabs_grouping is None: + sdct_config.form_tabs_grouping = {} + + sdct_config.form_tabs_grouping[tab_type] = tabs + return tabs + +@helper +def schemingdcat_slugify(s): + """ + Removes all non-alphanumeric characters from the input string. + + Args: + s (str): The input string to be slugified. + + Returns: + str: The slugified string with only alphanumeric characters. + """ + return sdct_config.slugify_pat.sub('', s) + +@helper +def schemingdcat_get_theme_statistics(themes: List[Dict], theme_field='theme', icons_dir=None) -> List[Dict]: + """ + Retrieve statistics for each unique theme in the provided list. + + Args: + themes (list): A list of dictionaries containing theme information. + theme_field (str): The key where the theme data is stored in each dictionary. + icons_dir (str, optional): Directory where the icons are stored. + + Returns: + list[dict]: A list of dictionaries containing the count, icon, theme, and label for each unique theme. + """ + + if icons_dir is None: + icons_dir = schemingdcat_get_icons_dir(field_name=theme_field) + + # Use a defaultdict to store unique themes and their counts + theme_counts = defaultdict(int) + + # Iterate over the themes and count occurrences + for theme_dict in themes: + theme_value = theme_dict.get(theme_field) # Access 'theme' using the provided field name + if theme_value: + try: + parsed_values = json.loads(theme_value) # Parse the JSON only once per theme + except json.JSONDecodeError: + continue # Skip if theme_value is not valid JSON + for val in parsed_values: + theme_counts[val] += 1 + + # Generate the final list of dictionaries + stats = [ + { + 'count': count, + 'icon': schemingdcat_get_icon(icons_dir=icons_dir, choice_value=theme), + 'value': theme, + 'label': theme.split('/')[-1], # Use split only once + 'field_name': theme_field, + } + for theme, count in theme_counts.items() # Process items directly without separate for loop + ] + + return stats + +@helper +def schemingdcat_update_open_data_statistics() -> Dict[str, Union[int, List[Dict[str, Union[int, str]]]]]: + """ + Retrieve Open Data portal statistics including counts of datasets, distributions, groups, organizations, tags, spatial datasets, and endpoints. + + Returns: + dict: A dictionary containing the counts of various site elements. + """ + actions = logic.get_action + + theme_field = schemingdcat_get_default_package_item_icon() + themes = get_theme_datasets(theme_field) + themes_stats = schemingdcat_get_theme_statistics(themes, theme_field) + + sdct_config.open_data_statistics = { + 'dataset_count': actions('package_search')({}, {"rows": 1})['count'], + 'distribution_count': actions('package_search')({}, {"rows": 1})['count'], + 'group_count': len(actions('group_list')({}, {})), + 'organization_count': len(actions('organization_list')({}, {})), + 'tag_count': len(actions('tag_list')({}, {})), + 'spatial_dataset_count': len(get_spatial_datasets()), + 'endpoints_count': len(schemingdcat_get_catalog_endpoints()), + 'themes_stats': themes_stats, + } \ No newline at end of file diff --git a/ckanext/schemingdcat/i18n/ckanext-schemingdcat.pot b/ckanext/schemingdcat/i18n/ckanext-schemingdcat.pot index 66d4bd2..86eaa33 100644 --- a/ckanext/schemingdcat/i18n/ckanext-schemingdcat.pot +++ b/ckanext/schemingdcat/i18n/ckanext-schemingdcat.pot @@ -351,6 +351,36 @@ msgstr "" msgid "This is for choosing a predefined layout for the modules that appear on your homepage." msgstr "" +#: ckanext/schemingdcat/templates/admin/index.html +msgid "" +"

As a sysadmin user you have full control over this CKAN instance. Proceed with care!

\n" +"

For guidance on using sysadmin features, see the CKAN sysadmin guide

" +msgstr "" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "

A sysadmin user can access and edit any organizations, view and change user details, and permanently delete datasets. You should carefully consider who has access to a sysadmin account on your CKAN system.

" +msgstr "" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "For guidance on using sysadmin features, see the CKAN" +msgstr "" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "sysadmin guide" +msgstr "" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "As a sysadmin user you have full control over this CKAN instance. Proceed with care!" +msgstr "" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "Current Sysadmins" +msgstr "" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "Promote user to Sysadmin" +msgstr "" + # ckanext-harvest #: ckanext/harvest/helpers.py:70 msgid "title" @@ -926,6 +956,18 @@ msgstr "" msgid "Query example (results containing 'medio-ambiente')" msgstr "" +#: ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +msgid "A simple request to the data API using Python." +msgstr "" + +#: ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +msgid "Further information in the main CKAN Data API and DataStore documentation." +msgstr "" + +#: ckanext/schemingdcat/templates/ajax_snippets +msgid "Example" +msgstr "" + #: ckanext/schemingdcat/templates/schemingdcat/endpoints/index.html msgid "What are Endpoints?" msgstr "" @@ -1000,6 +1042,14 @@ msgid_plural "Featured datasets" msgstr[0] "" msgstr[1] "" +#: ckanext/schemingdcat/templates/home/snippets/about_portal.html +msgid "Explore and use Open Data" +msgstr "" + +#: ckanext/schemingdcat/templates/home/snippets/about_themes.html +msgid "Theme categories" +msgstr "" + # ckanext/schemingdcat/templates/schemingdcat/metadata_templates/header_metadata_templates.html msgid "Metadata template" msgstr "" @@ -1036,6 +1086,18 @@ msgstr "" msgid "\"*\" means any character" msgstr "" +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "Next" +msgstr "" + +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "Add Data" +msgstr "" + +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "There are required fields in this category" +msgstr "" + # Themes (NTI-RISP) - Schema field_name: theme_es msgid "ciencia-tecnologia" msgstr "" @@ -1222,4 +1284,127 @@ msgid "Non-spatial datasets" msgstr "" msgid "Spatial datasets" -msgstr "" \ No newline at end of file +msgstr "" + +msgid "Spatial dataset" +msgstr "" + +# INSPIRE Themes - Schema field_name: theme +msgid "mf" +msgstr "" + +msgid "ac" +msgstr "" + +msgid "lc" +msgstr "" + +msgid "ad" +msgstr "" + +msgid "pd" +msgstr "" + +msgid "sd" +msgstr "" + +msgid "bu" +msgstr "" + +msgid "el" +msgstr "" + +msgid "ge" +msgstr "" + +msgid "hy" +msgstr "" + +msgid "hb" +msgstr "" + +msgid "af" +msgstr "" + +msgid "ef" +msgstr "" + +msgid "pf" +msgstr "" + +msgid "ps" +msgstr "" + +msgid "gn" +msgstr "" + +msgid "oi" +msgstr "" + +msgid "cp" +msgstr "" + +msgid "of" +msgstr "" + +msgid "er" +msgstr "" + +msgid "mr" +msgstr "" + +msgid "tn" +msgstr "" + +msgid "br" +msgstr "" + +msgid "sr" +msgstr "" + +msgid "hh" +msgstr "" + +msgid "us" +msgstr "" + +msgid "gg" +msgstr "" + +msgid "rs" +msgstr "" + +msgid "so" +msgstr "" + +msgid "au" +msgstr "" + +msgid "su" +msgstr "" + +msgid "lu" +msgstr "" + +msgid "nz" +msgstr "" + +msgid "am" +msgstr "" + +# Quote alerts +# ckanext/schemingdcat/templates/schemingdcat/snippets/quote_alerts.html +msgid "Tip" +msgstr "" + +msgid "Note" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "Caution" +msgstr "" + +msgid "Important" +msgstr "" diff --git a/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.mo b/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.mo index b55cfe3..3a00219 100644 Binary files a/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.mo and b/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.mo differ diff --git a/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.po b/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.po index cea78da..de9c03b 100644 --- a/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.po +++ b/ckanext/schemingdcat/i18n/en/LC_MESSAGES/ckanext-schemingdcat.po @@ -354,6 +354,42 @@ msgstr "This can be used for custom CSS on a CKAN site" msgid "This is for choosing a predefined layout for the modules that appear on your homepage." msgstr "This is for choosing a predefined layout for the modules that appear on your homepage." +#: ckanext/schemingdcat/templates/admin/index.html +msgid "" +"

As a sysadmin user you have full control over this CKAN instance. Proceed with care!

\n" +"

For guidance on using sysadmin features, see the CKAN sysadmin guide

" +msgstr "" +"

As a sysadmin user you have full control over this CKAN instance. Proceed with care!

\n" +"

For guidance on using sysadmin features, see the CKAN sysadmin guide

" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "

A sysadmin user can access and edit any organizations, view and change user details, and permanently delete datasets. You should carefully consider who has access to a sysadmin account on your CKAN system.

" +msgstr "

A sysadmin user can access and edit any organizations, view and change user details, and permanently delete datasets. You should carefully consider who has access to a sysadmin account on your CKAN system.

" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "For guidance on using sysadmin features, see the CKAN" +msgstr "For guidance on using sysadmin features, see the CKAN" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "For guidance on configuration options, see the CKAN" +msgstr "For guidance on configuration options, see the CKAN" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "sysadmin guide" +msgstr "sysadmin guide" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "As a sysadmin user you have full control over this CKAN instance. Proceed with care!" +msgstr "As a sysadmin user you have full control over this CKAN instance. Proceed with care!" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "Current Sysadmins" +msgstr "Current Sysadmins" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "Promote user to Sysadmin" +msgstr "Promote user to Sysadmin" + #: ckanext/schemingdcat/templates/header.html:5 msgid "Harvest metadata" msgstr "Harvest metadata" @@ -922,6 +958,18 @@ msgstr "(ckanapi library)" msgid "Query example (results containing 'medio-ambiente')" msgstr "Query example (results containing 'medio-ambiente')" +#: ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +msgid "A simple request to the data API using Python." +msgstr "A simple request to the data API using Python." + +#: ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +msgid "Further information in the main CKAN Data API and DataStore documentation." +msgstr "Further information in the main CKAN Data API and DataStore documentation." + +#: ckanext/schemingdcat/templates/ajax_snippets +msgid "Example" +msgstr "Example" + #: ckanext/schemingdcat/templates/schemingdcat/endpoints/index.html msgid "What are Endpoints?" msgstr "What are Endpoints?" @@ -989,6 +1037,14 @@ msgid_plural "Featured datasets" msgstr[0] "Featured dataset" msgstr[1] "Featured datasets" +#: ckanext/schemingdcat/templates/home/snippets/about_portal.html +msgid "Explore and use Open Data" +msgstr "Explore and use Open Data" + +#: ckanext/schemingdcat/templates/home/snippets/about_themes.html +msgid "Theme categories" +msgstr "Theme categories" + # ckanext/schemingdcat/templates/schemingdcat/metadata_templates/header_metadata_templates.html msgid "Metadata template" msgstr "Metadata template" @@ -1025,6 +1081,18 @@ msgstr "To retrieve them, use an identifier that includes the following" msgid "\"*\" means any character" msgstr "\"*\" means any character" +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "Next" +msgstr "Next" + +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "Add Data" +msgstr "Add Data" + +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "There are required fields in this category" +msgstr "There are required fields in this category" + # Themes (NTI-RISP) - Schema field_name: theme_es msgid "ciencia-tecnologia" msgstr "Science and technology" @@ -1211,4 +1279,127 @@ msgid "Non-spatial datasets" msgstr "Non-spatial datasets" msgid "Spatial datasets" -msgstr "Spatial datasets" \ No newline at end of file +msgstr "Spatial datasets" + +msgid "Spatial dataset" +msgstr "Spatial dataset" + +# INSPIRE Themes - Schema field_name: theme +msgid "mf" +msgstr "Meteorological geographical features" + +msgid "ac" +msgstr "Atmospheric conditions" + +msgid "lc" +msgstr "Land Cover" + +msgid "ad" +msgstr "Addresses" + +msgid "pd" +msgstr "Population distribution — demography" + +msgid "sd" +msgstr "Species distribution" + +msgid "bu" +msgstr "Buildings" + +msgid "el" +msgstr "Elevations" + +msgid "ge" +msgstr "Geology" + +msgid "hy" +msgstr "Hydrography" + +msgid "hb" +msgstr "Habitats and Biotopes" + +msgid "af" +msgstr "Agricultural and aquaculture facilities" + +msgid "ef" +msgstr "Environmental Monitoring Facilities" + +msgid "pf" +msgstr "Production and Industrial Facilities" + +msgid "ps" +msgstr "Protected sites" + +msgid "gn" +msgstr "Geographical names" + +msgid "oi" +msgstr "Orthoimagery" + +msgid "cp" +msgstr "Cadastral parcels" + +msgid "of" +msgstr "Oceanographic Geographical Features" + +msgid "er" +msgstr "Energy resources" + +msgid "mr" +msgstr "Mineral resources" + +msgid "tn" +msgstr "Transport networks" + +msgid "br" +msgstr "Bio-geographical regions" + +msgid "sr" +msgstr "Sea regions" + +msgid "hh" +msgstr "Human health and safety" + +msgid "us" +msgstr "Utility and governmental services" + +msgid "gg" +msgstr "Geographical Grid Systems" + +msgid "rs" +msgstr "Coordinate reference systems" + +msgid "so" +msgstr "Soil" + +msgid "au" +msgstr "Administrative units" + +msgid "su" +msgstr "Statistical units" + +msgid "lu" +msgstr "Land use" + +msgid "nz" +msgstr "Natural risk zones" + +msgid "am" +msgstr "Area management/restriction/regulation zones and reporting units" + +# Quote alerts +# ckanext/schemingdcat/templates/schemingdcat/snippets/quote_alerts.html +msgid "Tip" +msgstr "Tip" + +msgid "Note" +msgstr "Note" + +msgid "Warning" +msgstr "Warning" + +msgid "Caution" +msgstr "Caution" + +msgid "Important" +msgstr "Important" \ No newline at end of file diff --git a/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.mo b/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.mo index b2c2072..16fe902 100644 Binary files a/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.mo and b/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.mo differ diff --git a/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.po b/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.po index d683392..dd7fc1c 100644 --- a/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.po +++ b/ckanext/schemingdcat/i18n/es/LC_MESSAGES/ckanext-schemingdcat.po @@ -363,6 +363,35 @@ msgstr "Esto se puede utilizar para añadir CSS personalizado en un sitio CKAN" msgid "This is for choosing a predefined layout for the modules that appear on your homepage." msgstr "Permite elegir un diseño predefinido para los módulos que aparecen en la página de inicio." + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "

A sysadmin user can access and edit any organizations, view and change user details, and permanently delete datasets. You should carefully consider who has access to a sysadmin account on your CKAN system.

" +msgstr "

Un administrador puede acceder a cualquier organización y editarla, ver y cambiar los detalles de los usuarios y eliminar conjuntos de datos de forma permanente. Debe considerar cuidadosamente quién tiene acceso a una cuenta sysadmin en su sistema CKAN.

" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "For guidance on using sysadmin features, see the CKAN" +msgstr "Para obtener orientación sobre el uso de las funciones de administrador del sistema, consulte la" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "For guidance on configuration options, see the CKAN" +msgstr "Para obtener orientación sobre las opciones de configuración, consulte la" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "sysadmin guide" +msgstr "guía del administrador del sistema de CKAN" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "As a sysadmin user you have full control over this CKAN instance. Proceed with care!" +msgstr "Como administrador del sistema se tiene control total sobre esta instancia de CKAN. ¡Proceda con cuidado!" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "Current Sysadmins" +msgstr "Administradores actuales" + +#: ckanext/schemingdcat/templates/admin/index.html +msgid "Promote user to Sysadmin" +msgstr "Elevar usuario a Administrador de CKAN" + #: ckanext/schemingdcat/templates/header.html:5 msgid "Harvest metadata" msgstr "Cosechar metadatos" @@ -931,6 +960,18 @@ msgstr "(Librería ckanapi)" msgid "Query example (results containing 'medio-ambiente')" msgstr "Consulta ejemplo (resultados que contienen 'medio-ambiente')" +#: ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +msgid "A simple request to the data API using Python." +msgstr "Una simple petición a la API de datos utilizando Python." + +#: ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +msgid "Further information in the main CKAN Data API and DataStore documentation." +msgstr "Más información en la documentación principal de la API de datos de CKAN y DataStore." + +#: ckanext/schemingdcat/templates/ajax_snippets +msgid "Example" +msgstr "Ejemplo" + #: ckanext/schemingdcat/templates/schemingdcat/endpoints/index.html msgid "What are Endpoints?" msgstr "¿Qué son los Endpoints?" @@ -1001,6 +1042,14 @@ msgid_plural "Featured datasets" msgstr[0] "Conjunto de datos destacado" msgstr[1] "Conjuntos de datos destacados" +#: ckanext/schemingdcat/templates/home/snippets/about_portal.html +msgid "Explore and use Open Data" +msgstr "Explora y utiliza datos abiertos" + +#: ckanext/schemingdcat/templates/home/snippets/about_themes.html +msgid "Theme categories" +msgstr "Categorías temáticas" + # ckanext/schemingdcat/templates/schemingdcat/metadata_templates/header_metadata_templates.html msgid "Metadata template" msgstr "Plantilla de metadatos" @@ -1037,6 +1086,18 @@ msgstr "Para recuperarlas, utilice un identificador que incluya lo siguiente" msgid "\"*\" means any character" msgstr "\"*\" se refiere a cualquier carácter" +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "Next" +msgstr "Siguiente" + +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "Add Data" +msgstr "Añadir Datos" + +# ckanext/schemingdcat/templates/package/snippets/package_form.html +msgid "There are required fields in this category" +msgstr "Esta categoría contiene campos obligatorios" + # Themes (NTI-RISP) - Schema field_name: theme_es msgid "ciencia-tecnologia" msgstr "Ciencia y tecnología" @@ -1223,4 +1284,127 @@ msgid "Non-spatial datasets" msgstr "Conjuntos de datos no espaciales" msgid "Spatial datasets" -msgstr "Conjuntos de datos espaciales" \ No newline at end of file +msgstr "Conjuntos de datos espaciales" + +msgid "Spatial dataset" +msgstr "Conjunto de datos espaciales" + +# INSPIRE Themes - Schema field_name: theme +msgid "mf" +msgstr "Aspectos geográficos de carácter meteorológico" + +msgid "ac" +msgstr "Condiciones atmosféricas" + +msgid "lc" +msgstr "Cubierta terrestre" + +msgid "ad" +msgstr "Direcciones" + +msgid "pd" +msgstr "Distribución de la población - demografía" + +msgid "sd" +msgstr "Distribución de las especies" + +msgid "bu" +msgstr "Edificios" + +msgid "el" +msgstr "Elevaciones" + +msgid "ge" +msgstr "Geología" + +msgid "hy" +msgstr "Hidrografía" + +msgid "hb" +msgstr "Hábitats y biotopos" + +msgid "af" +msgstr "Instalaciones agrícolas y de acuicultura" + +msgid "ef" +msgstr "Instalaciones de observación del medio ambiente" + +msgid "pf" +msgstr "Instalaciones de producción e industriales" + +msgid "ps" +msgstr "Lugares protegidos" + +msgid "gn" +msgstr "Nombres geográficos" + +msgid "oi" +msgstr "Ortoimágenes" + +msgid "cp" +msgstr "Parcelas catastrales" + +msgid "of" +msgstr "Rasgos geográficos oceanográficos" + +msgid "er" +msgstr "Recursos energéticos" + +msgid "mr" +msgstr "Recursos minerales" + +msgid "tn" +msgstr "Redes de transporte" + +msgid "br" +msgstr "Regiones biogeográficas" + +msgid "sr" +msgstr "Regiones marinas" + +msgid "hh" +msgstr "Salud y seguridad humanas" + +msgid "us" +msgstr "Servicios de utilidad pública y estatales" + +msgid "gg" +msgstr "Sistema de cuadrículas geográficas" + +msgid "rs" +msgstr "Sistemas de coordenadas de referencia" + +msgid "so" +msgstr "Suelo" + +msgid "au" +msgstr "Unidades administrativas" + +msgid "su" +msgstr "Unidades estadísticas" + +msgid "lu" +msgstr "Uso del suelo" + +msgid "nz" +msgstr "Zonas de riesgos naturales" + +msgid "am" +msgstr "Zonas sujetas a ordenación, a restricciones o reglamentaciones y unidades de notificación" + +# Quote alerts +# ckanext/schemingdcat/templates/schemingdcat/snippets/quote_alerts.html +msgid "Tip" +msgstr "Consejo" + +msgid "Note" +msgstr "Nota" + +msgid "Warning" +msgstr "Advertencia" + +msgid "Caution" +msgstr "Precaución" + +msgid "Important" +msgstr "Importante" \ No newline at end of file diff --git a/ckanext/schemingdcat/i18n/tools/.gitignore b/ckanext/schemingdcat/i18n/tools/.gitignore new file mode 100644 index 0000000..f5e96db --- /dev/null +++ b/ckanext/schemingdcat/i18n/tools/.gitignore @@ -0,0 +1 @@ +venv \ No newline at end of file diff --git a/ckanext/schemingdcat/i18n/tools/README.md b/ckanext/schemingdcat/i18n/tools/README.md index d8d3117..4f7b857 100644 --- a/ckanext/schemingdcat/i18n/tools/README.md +++ b/ckanext/schemingdcat/i18n/tools/README.md @@ -18,10 +18,41 @@ choices: # ... more choices ... ``` -## Field Definitions +>[!WARNING] +> Make sure that field_name is not misspelled or starts with "-", otherwise it will fail. +## Field Definitions - `field_name`: The name of the field. - `label`: The label for the field in different languages. - `choices`: The choices for the field. Each choice has a `label` in different languages and a `value`. -Please ensure that the YAML file is correctly formatted and all required fields are provided. \ No newline at end of file +Please ensure that the YAML file is correctly formatted and all required fields are provided. + +## Launch script +To run the script with `virtualenv`, follow these steps: +1. **Create and activate the virtual environment: + ```sh + # Install virtualenv if not already installed + pip install virtualenv + + # Create the virtual environment + virtualenv venv + + # Activate the virtual machine (Linux and MacOS) + source venv/bin/activate + + # Activate virtual environment (Windows) + .\venv/scripts/activate + ``` + +2. Install the **dependencies**: + ```sh + pip install -r requirements.txt + ``` + +3. Run the script: + ```sh + python generate_translation_files.py + ``` + +4. The updated i18n folder will be created with the new schema labels in: `output/{field_name}`. \ No newline at end of file diff --git a/ckanext/schemingdcat/i18n/tools/input/input.yaml b/ckanext/schemingdcat/i18n/tools/input/input.yaml index be20b64..18f3920 100644 --- a/ckanext/schemingdcat/i18n/tools/input/input.yaml +++ b/ckanext/schemingdcat/i18n/tools/input/input.yaml @@ -1,39 +1,151 @@ -# High-value dataset category (R) - field_name: hvd_category - label: - en: High-value dataset category - es: Categoría del conjunto de alto valor (HVD) - preset: select - display_property: dcatap:hvdCategory - display_snippet: schemingdcat/display_snippets/link_schema.html +# INSPIRE Themes (M) + field_name: theme + label: + en: INSPIRE Themes + es: Temas INSPIRE + display_property: dcat:theme + preset: multiple_choice_icon + select_size: 10 help_text: - en: 'More info: High-value datasets - Overview, Vocab - EU Publications and Implementing Act (European Commission)' - es: 'Referencias: Conjuntos de alto valor - Visión generale, Vocabulario - EU Publications y Reglamento de Implementación (Comisión Europea)' + en: 'Themes (INSPIRE)' + es: 'Temas (INSPIRE)' help_allow_html: True sorted_choices: True choices: - label: - en: Meteorological - es: Meteorología - value: http://data.europa.eu/bna/c_164e0bf5 + en: Meteorological geographical features (MF) + es: Aspectos geográficos de carácter meteorológico (MF) + value: http://inspire.ec.europa.eu/theme/mf - label: - en: Companies and company ownership - es: Sociedades y propiedad de sociedades - value: http://data.europa.eu/bna/c_a9135398 + en: Atmospheric conditions (AC) + es: Condiciones atmosféricas (AC) + value: http://inspire.ec.europa.eu/theme/ac - label: - en: Geospatial - es: Geospacial - value: http://data.europa.eu/bna/c_ac64a52d + en: Land Cover (LC) + es: Cubierta terrestre (LC) + value: http://inspire.ec.europa.eu/theme/lc - label: - en: Mobility - es: Movilidad - value: http://data.europa.eu/bna/c_b79e35eb + en: Addresses (AD) + es: Direcciones (AD) + value: http://inspire.ec.europa.eu/theme/ad - label: - en: Earth observation and environment - es: Observación de la Tierra y medio ambiente - value: http://data.europa.eu/bna/c_dd313021 + en: Population distribution — demography (PD) + es: Distribución de la población - demografía (PD) + value: http://inspire.ec.europa.eu/theme/pd - label: - en: Statistics - es: Estadística - value: http://data.europa.eu/bna/c_e1da4e07 - form_group_id: identification \ No newline at end of file + en: Species distribution (SD) + es: Distribución de las especies (SD) + value: http://inspire.ec.europa.eu/theme/sd + - label: + en: Buildings (BU) + es: Edificios (BU) + value: http://inspire.ec.europa.eu/theme/bu + - label: + en: Elevations (EL) + es: Elevaciones (EL) + value: http://inspire.ec.europa.eu/theme/el + - label: + en: Geology (GE) + es: Geología (GE) + value: http://inspire.ec.europa.eu/theme/ge + - label: + en: Hydrography (HY) + es: Hidrografía (HY) + value: http://inspire.ec.europa.eu/theme/hy + - label: + en: Habitats and Biotopes (HB) + es: Hábitats y biotopos (HB) + value: http://inspire.ec.europa.eu/theme/hb + - label: + en: Agricultural and aquaculture facilities (AF) + es: Instalaciones agrícolas y de acuicultura (AF) + value: http://inspire.ec.europa.eu/theme/af + - label: + en: Environmental Monitoring Facilities (EF) + es: Instalaciones de observación del medio ambiente (EF) + value: http://inspire.ec.europa.eu/theme/ef + - label: + en: Production and Industrial Facilities (PF) + es: Instalaciones de producción e industriales (PF) + value: http://inspire.ec.europa.eu/theme/pf + - label: + en: Protected sites (PS) + es: Lugares protegidos (PS) + value: http://inspire.ec.europa.eu/theme/ps + - label: + en: Geographical names (GN) + es: Nombres geográficos (GN) + value: http://inspire.ec.europa.eu/theme/gn + - label: + en: Orthoimagery (OI) + es: Ortoimágenes (OI) + value: http://inspire.ec.europa.eu/theme/oi + - label: + en: Cadastral parcels (CP) + es: Parcelas catastrales (CP) + value: http://inspire.ec.europa.eu/theme/cp + - label: + en: Oceanographic Geographical Features (OF) + es: Rasgos geográficos oceanográficos (OF) + value: http://inspire.ec.europa.eu/theme/of + - label: + en: Energy resources (ER) + es: Recursos energéticos (ER) + value: http://inspire.ec.europa.eu/theme/er + - label: + en: Mineral resources (MR) + es: Recursos minerales (MR) + value: http://inspire.ec.europa.eu/theme/mr + - label: + en: Transport networks (TN) + es: Redes de transporte (TN) + value: http://inspire.ec.europa.eu/theme/tn + - label: + en: Bio-geographical regions (BR) + es: Regiones biogeográficas (BR) + value: http://inspire.ec.europa.eu/theme/br + - label: + en: Sea regions (BR) + es: Regiones marinas (SR) + value: http://inspire.ec.europa.eu/theme/sr + - label: + en: Human health and safety (HH) + es: Salud y seguridad humanas (HH) + value: http://inspire.ec.europa.eu/theme/hh + - label: + en: Utility and governmental services (US) + es: Servicios de utilidad pública y estatales (US) + value: http://inspire.ec.europa.eu/theme/us + - label: + en: Geographical Grid Systems (GG) + es: Sistema de cuadrículas geográficas (GG) + value: http://inspire.ec.europa.eu/theme/gg + - label: + en: Coordinate reference systems (RS) + es: Sistemas de coordenadas de referencia (RS) + value: http://inspire.ec.europa.eu/theme/rs + - label: + en: Soil (SO) + es: Suelo (SO) + value: http://inspire.ec.europa.eu/theme/so + - label: + en: Administrative units (SO) + es: Unidades administrativas (SO) + value: http://inspire.ec.europa.eu/theme/au + - label: + en: Statistical units (SU) + es: Unidades estadísticas (SU) + value: http://inspire.ec.europa.eu/theme/su + - label: + en: Land use (LU) + es: Uso del suelo (LU) + value: http://inspire.ec.europa.eu/theme/lu + - label: + en: Natural risk zones (NZ) + es: Zonas de riesgos naturales (NZ) + value: http://inspire.ec.europa.eu/theme/nz + - label: + en: Area management/restriction/regulation zones and reporting units (AM) + es: Zonas sujetas a ordenación, a restricciones o reglamentaciones y unidades de notificación (AM) + value: http://inspire.ec.europa.eu/theme/am + form_group_id: inspire diff --git a/ckanext/schemingdcat/i18n/tools/requirements.txt b/ckanext/schemingdcat/i18n/tools/requirements.txt new file mode 100644 index 0000000..4818cc5 --- /dev/null +++ b/ckanext/schemingdcat/i18n/tools/requirements.txt @@ -0,0 +1 @@ +pyyaml \ No newline at end of file diff --git a/ckanext/schemingdcat/interfaces.py b/ckanext/schemingdcat/interfaces.py index c318efd..8a717bc 100644 --- a/ckanext/schemingdcat/interfaces.py +++ b/ckanext/schemingdcat/interfaces.py @@ -149,7 +149,7 @@ def before_update(self, harvest_object, package_dict, harvester_tmp_dict): temp data. Such dict will be passed back in the ``after_update`` call. """ - pass + return None def after_update(self, harvest_object, package_dict, harvester_tmp_dict): """ diff --git a/ckanext/schemingdcat/package_controller.py b/ckanext/schemingdcat/package_controller.py index 99db3d5..9d977c5 100644 --- a/ckanext/schemingdcat/package_controller.py +++ b/ckanext/schemingdcat/package_controller.py @@ -1,11 +1,16 @@ from ckan.common import request import json import ckan.plugins as plugins + +from ckanext.scheming.plugins import ( + SchemingDatasetsPlugin +) + import ckanext.schemingdcat.config as sdct_config -import ckanext.schemingdcat.utils as utils import logging import sys +import ast FACET_OPERATOR_PARAM_NAME = '_facet_operator' FACET_SORT_PARAM_NAME = '_%s_sort' @@ -15,7 +20,7 @@ class PackageController(): - plugins.implements(plugins.IPackageController) + plugins.implements(plugins.IPackageController, inherit=True) default_facet_operator = sdct_config.default_facet_operator @@ -37,22 +42,31 @@ def authz_remove_role(self, object_role): def delete(self, entity): pass + + # CKAN < 2.10 def before_search(self, search_params): - """Modifies search parameters before executing a search. + return self.before_dataset_search(search_params) + # CKAN >= 2.10 + def before_dataset_search(self, search_params): + """Modifies search parameters before executing a search. + This method adjusts the 'fq' (filter query) parameter based on the 'facet.field' value in the search parameters. If 'facet.field' is a list, it iterates through each field, applying the '_facet_search_operator' to modify 'fq'. If 'facet.field' is a string, it directly applies the '_facet_search_operator'. If 'facet.field' is not present or is invalid, no modification is made. - + Args: search_params (dict): The search parameters to be modified. Expected to contain 'facet.field' and 'fq'. - + Returns: dict: The modified search parameters. - + Raises: Exception: Captures and logs any exception that occurs during the modification of search parameters. """ try: + #log.debug("Initial search_params: %s", search_params) facet_field = search_params.get('facet.field', '') + #log.debug("facet.field: %s", facet_field) + if not facet_field: return search_params elif isinstance(facet_field, list): @@ -68,48 +82,208 @@ def before_search(self, search_params): log.error("[before_search] Error: %s", e) return search_params + # CKAN < 2.10 def after_search(self, search_results, search_params): + return self.after_dataset_search(search_results, search_params) + + def after_dataset_search(self, search_results, search_params): return search_results + # CKAN < 2.10 def before_index(self, data_dict): - """Processes the data dictionary before indexing. + return self.before_dataset_index(data_dict) + + def before_dataset_index(self, data_dict): + """ + Processes the data dictionary before dataset indexing. + + Args: + data_dict (dict): The data dictionary to be processed. + + Returns: + dict: The processed data dictionary. + """ + # Remove empty extras keys + data_dict = self.remove_empty_extras_keys(data_dict) + + # Convert stringified lists to actual lists + data_dict = self.convert_stringified_lists(data_dict) + + # Flatten repeating subfields + data_dict = self.flatten_repeating_subfields(data_dict) - Iterates through each facet defined in the system's facets dictionary. For each facet present in the data dictionary, it attempts to parse its value as JSON. If the value is a valid JSON string, it replaces the original string value with the parsed JSON object. If the value cannot be parsed as JSON (e.g., because it's not a valid JSON string), it leaves the value unchanged. Facets present in the data dictionary but not containing any data are removed. + # Convert dict fields to JSON strings to avoid errors in Solr 9 + data_dict = self._before_index_dump_dicts(data_dict) + + return data_dict + + def convert_stringified_lists(self, data_dict): + """ + Converts stringified lists in the data dictionary to actual lists. + + Args: + data_dict (dict): The data dictionary to be processed. + + Returns: + dict: The processed data dictionary with actual lists. + + This function iterates over the items in the data dictionary and converts + any stringified lists (strings that start with '[' and end with ']') into + actual lists. Keys that start with 'extras_', 'res_', or are 'validated_data_dict' + are excluded from this conversion. + """ + # Excluded items + excluded_keys = [ + key for key in data_dict + if key.startswith('extras_') or key.startswith('res_') or key == 'validated_data_dict' + ] + + # Filter data dictionary + filter_data_dict = { + key: value for key, value in data_dict.items() + if key not in excluded_keys + } + + for key, value in filter_data_dict.items(): + if isinstance(value, str) and value.startswith('[') and value.endswith(']'): + try: + data_dict[key] = ast.literal_eval(value) + except (ValueError, SyntaxError) as e: + log.error("Error converting stringified list for key '%s': %s", key, e) + + return data_dict + + def remove_empty_extras_keys(self, data_dict): + """ + Remove extra_* and res_extras_* keys that contain empty lists or lists of empty strings. Args: - data_dict (dict): The data dictionary to be processed. It's expected to contain keys corresponding to facet names with their associated data as values. + data_dict (dict): The data dictionary to be processed. + + Returns: + dict: The processed data dictionary with empty extras keys removed. + """ + keys_to_remove = [] + for key, value in data_dict.items(): + if (key.startswith('extras_') or key.startswith('res_extras_')) and isinstance(value, list): + if all(not item.strip() for item in value if isinstance(item, str)): + keys_to_remove.append(key) + + for key in keys_to_remove: + data_dict.pop(key, None) + return data_dict + + def flatten_repeating_subfields(self, data_dict): + """ + Based on https://github.com/ckan/ckanext-scheming/pull/414 + + Notes: + Index suitable repeating dataset fields in before_dataset_index to prevent failures + on unmodified solr schema. This will allow hitting results in most text and list + subfields. Ideally you probably want to select the relevant subfields that will get + indexed and modify the Solr schema if necessary. + This implementation will group the values of the same subfields into an + `extras_{field_name}__{key}`,a text Solr field that will allow free-text search on + its value. Again, if you require more precise handling of a particular subfield, + you will need to customize the Solr schema to add particular fields needed. + + Args: + data_dict (dict): The data dictionary to be processed. + Returns: - dict: The processed data dictionary with JSON strings parsed into objects where applicable and empty facets removed. + dict: The processed data dictionary with flattened repeating subfields. """ - for facet, label in utils.get_facets_dict().items(): - data = data_dict.get(facet) - #log.debug("[before_index] Data ({1}) in facet: {0}".format(data, facet)) - if data: - if isinstance(data, str): - try: - data_dict[facet] = json.loads(data) - except json.decoder.JSONDecodeError: - data_dict[facet] = data - else: - if facet in data_dict: - del data_dict[facet] + schemas = SchemingDatasetsPlugin.instance._expanded_schemas + if data_dict['type'] not in schemas: + return data_dict + + schema = schemas[data_dict['type']] + + for field in schema['dataset_fields']: + if field['field_name'] in data_dict and 'repeating_subfields' in field: + flattened_values = {} + for item in data_dict[field['field_name']]: + for key, value in item.items(): + if isinstance(value, dict): + continue + if isinstance(value, list): + value = ' '.join(value) + new_key = 'extras_{field_name}__{key}'.format( + field_name=field["field_name"], key=key + ) + if new_key not in flattened_values: + flattened_values[new_key] = value + else: + flattened_values[new_key] += ' ' + value + + data_dict.update(flattened_values) + data_dict.pop(field['field_name'], None) + + return data_dict + def _before_index_dump_dicts(self, data_dict): + """ + Converts dict fields in the data dictionary to JSON strings. + + This function is necessary to ensure that all fields in the data dictionary + can be indexed by Solr. Solr cannot directly index fields of type dict, + which can lead to errors such as "missing required field" even when the + field is present in the data dictionary. By converting dict fields to JSON + strings, we ensure that the data is in a format that Solr can handle. + + This issue (https://github.com/ckan/ckan/issues/8423) has been observed in CKAN versions 2.10.4 and Solr 9, where + attempts to upload resources to the Datastore resulted in errors due to + the presence of dict fields in the data dictionary. The solution involves + transforming these fields into strings before indexing, as discussed in + the following issues: + - CKAN - Custom plugin/theme error datastore using fluent presets https://github.com/ckan/ckan/issues/7750 + - Solr error: missing required field https://github.com/ckan/ckan/issues/7730 + + Args: + data_dict (dict): The data dictionary to be processed. + + Returns: + dict: The processed data dictionary with dict fields as JSON strings. + """ + for key, value in data_dict.items(): + if isinstance(value, dict): + data_dict[key] = json.dumps(value) return data_dict + # CKAN < 2.10 def before_view(self, pkg_dict): + return self.before_dataset_view(pkg_dict) + + def before_dataset_view(self, pkg_dict): return pkg_dict + # CKAN < 2.10 def after_create(self, context, data_dict): + return self.after_dataset_create(context, data_dict) + + def after_dataset_create(self, context, data_dict): return data_dict + # CKAN < 2.10 def after_update(self, context, data_dict): + return self.after_dataset_update(context, data_dict) + + def after_dataset_update(self, context, data_dict): return data_dict + # CKAN < 2.10 def after_delete(self, context, data_dict): + return self.after_dataset_delete(context, data_dict) + + def after_dataset_delete(self, context, data_dict): return data_dict + # CKAN < 2.10 def after_show(self, context, data_dict): + return self.after_dataset_show(context, data_dict) + + def after_dataset_show(self, context, data_dict): return data_dict def update_facet_titles(self, facet_titles): @@ -132,9 +306,9 @@ def _facet_search_operator(self, fq, facet_field): try: facet_operator = self.default_facet_operator # Determine the facet operator based on request parameters - if request.params.get(FACET_OPERATOR_PARAM_NAME) == 'OR': + if request.args.get(FACET_OPERATOR_PARAM_NAME) == 'OR': facet_operator = 'OR' - elif request.params.get(FACET_OPERATOR_PARAM_NAME) == 'AND': + elif request.args.get(FACET_OPERATOR_PARAM_NAME) == 'AND': facet_operator = 'AND' if facet_operator == 'OR' and facet_field: diff --git a/ckanext/schemingdcat/plugin.py b/ckanext/schemingdcat/plugin.py index 30e7c23..3831835 100644 --- a/ckanext/schemingdcat/plugin.py +++ b/ckanext/schemingdcat/plugin.py @@ -1,26 +1,37 @@ +import sys +import logging + +from ckan.common import json from ckan.lib.plugins import DefaultTranslation import ckan.plugins as plugins import ckan.plugins.toolkit as toolkit +from ckan.lib.navl.dictization_functions import unflatten from ckanext.scheming.plugins import ( SchemingDatasetsPlugin, SchemingGroupsPlugin, SchemingOrganizationsPlugin, + _field_validators, + _field_output_validators, + _field_create_validators, + expand_form_composite, ) from ckanext.scheming import logic as scheming_logic +from ckanext.scheming import validation as scheming_validation import ckanext.schemingdcat.cli as cli import ckanext.schemingdcat.config as sdct_config from ckanext.schemingdcat.faceted import Faceted from ckanext.schemingdcat.utils import init_config from ckanext.schemingdcat.package_controller import PackageController -from ckanext.schemingdcat import helpers, validators, logic, blueprint +from ckanext.schemingdcat import helpers, validators, logic, blueprint, subscriptions -import logging log = logging.getLogger(__name__) +convert_to_extras = toolkit.get_converter('convert_to_extras') + class SchemingDCATPlugin( plugins.SingletonPlugin, Faceted, PackageController, DefaultTranslation ): @@ -32,6 +43,7 @@ class SchemingDCATPlugin( plugins.implements(plugins.IValidators) plugins.implements(plugins.IBlueprint) plugins.implements(plugins.IClick) + plugins.implements(plugins.ISignal) # IConfigurer def update_config(self, config_): @@ -93,23 +105,38 @@ def update_config(self, config_): ) or sdct_config.endpoints_yaml sdct_config.debug = toolkit.asbool(config_.get("debug", sdct_config.debug)) - - - # New form tabs - sdct_config.form_tabs_allowed = toolkit.asbool( - config_.get( - "schemingdcat.form_tabs_allowed", sdct_config.form_tabs_allowed - ) - ) - + # Default value use local ckan instance with /csw sdct_config.geometadata_base_uri = config_.get( "schemingdcat.geometadata_base_uri", "/csw" ) + # Social accounts + sdct_config.social_github = config_.get( + "schemingdcat.social_github", sdct_config.social_github + ) or sdct_config.social_github + + sdct_config.social_linkedin = config_.get( + "schemingdcat.social_linkedin", sdct_config.social_linkedin + ) or sdct_config.social_linkedin + + sdct_config.social_x = config_.get( + "schemingdcat.social_x", sdct_config.social_x + ) or sdct_config.social_x + # Load yamls config files init_config() + # Update the site statistics + # Check whether we are running a database initialization or upgrade command. + # If so, we should skip the statistics update to avoid potential conflicts. + args = sys.argv + if 'db' in args and ('init' in args or 'upgrade' in args): + log.warning('Skipping Open Data site stats update due to db init or upgrade.') + else: + log.debug('Initializing Open Data site statistics') + helpers.schemingdcat_update_open_data_statistics() + # configure Faceted class (parent of this) self.facet_load_config(config_.get("schemingdcat.facet_list", "").split()) @@ -128,6 +155,10 @@ def get_blueprint(self): def get_commands(self): return cli.get_commands() + # ISignal + def get_signal_subscriptions(self): + return subscriptions.get_subscriptions() + class SchemingDCATDatasetsPlugin(SchemingDatasetsPlugin): plugins.implements(plugins.IConfigurer) plugins.implements(plugins.IConfigurable) @@ -155,6 +186,95 @@ def get_actions(self): "scheming_dataset_schema_show": scheming_logic.scheming_dataset_schema_show, } + # Override Scheming plugin to avoid errors when not extras are present in datastore resource (for ex in data_dict['extras'] KeyError: 'extras') + def validate(self, context, data_dict, schema, action): + """ + Validate and convert for package_create, package_update and + package_show actions. + """ + thing, action_type = action.split('_') + t = data_dict.get('type') + if not t or t not in self._schemas: + return data_dict, {'type': [ + "Unsupported dataset type: {t}".format(t=t)]} + + scheming_schema = self._expanded_schemas[t] + + before = scheming_schema.get('before_validators') + after = scheming_schema.get('after_validators') + if action_type == 'show': + get_validators = _field_output_validators + before = after = None + elif action_type == 'create': + get_validators = _field_create_validators + else: + get_validators = _field_validators + + if before: + schema['__before'] = scheming_validation.validators_from_string( + before, None, scheming_schema) + if after: + schema['__after'] = scheming_validation.validators_from_string( + after, None, scheming_schema) + fg = ( + (scheming_schema['dataset_fields'], schema, True), + (scheming_schema['resource_fields'], schema['resources'], False) + ) + + composite_convert_fields = [] + for field_list, destination, is_dataset in fg: + for f in field_list: + convert_this = is_dataset and f['field_name'] not in schema + destination[f['field_name']] = get_validators( + f, + scheming_schema, + convert_this + ) + if convert_this and 'repeating_subfields' in f: + composite_convert_fields.append(f['field_name']) + + def composite_convert_to(key, data, errors, context): + unflat = unflatten(data) + for f in composite_convert_fields: + if f not in unflat: + continue + data[(f,)] = json.dumps(unflat[f], default=lambda x:None if x == toolkit.missing else x) + convert_to_extras((f,), data, errors, context) + del data[(f,)] + + if action_type == 'show': + if composite_convert_fields and 'extras' in data_dict: + for ex in data_dict['extras']: + if ex['key'] in composite_convert_fields: + data_dict[ex['key']] = json.loads(ex['value']) + data_dict['extras'] = [ + ex for ex in data_dict['extras'] + if ex['key'] not in composite_convert_fields + ] + else: + dataset_composite = { + f['field_name'] + for f in scheming_schema['dataset_fields'] + if 'repeating_subfields' in f + } + if dataset_composite: + expand_form_composite(data_dict, dataset_composite) + resource_composite = { + f['field_name'] + for f in scheming_schema['resource_fields'] + if 'repeating_subfields' in f + } + if resource_composite and 'resources' in data_dict: + for res in data_dict['resources']: + expand_form_composite(res, resource_composite.copy()) + # convert composite package fields to extras so they are stored + if composite_convert_fields: + schema = dict( + schema, + __after=schema.get('__after', []) + [composite_convert_to]) + + return toolkit.navl_validate(data_dict, schema, context) + class SchemingDCATGroupsPlugin(SchemingGroupsPlugin): plugins.implements(plugins.IConfigurer) diff --git a/ckanext/schemingdcat/profiles/__init__.py b/ckanext/schemingdcat/profiles/__init__.py new file mode 100644 index 0000000..dea0548 --- /dev/null +++ b/ckanext/schemingdcat/profiles/__init__.py @@ -0,0 +1,32 @@ +# Custom ckanext-dcat EuropeanDCATAPSchemingProfile +from .eu_dcat_ap_scheming import EuDCATAPSchemingDCATProfile + +# NTI-RISP Profile (Spanish custom DCAT profile of datos.gob.es) https://datos.gob.es/es/doc-tags/nti-risp +from .dcat.es_dcat import EsNTIRISPProfile + +# DCAT-AP Profiles +from .dcat_ap.eu_dcat_ap_2 import EuDCATAP2Profile +from .dcat_ap.eu_dcat_ap_3 import EuDCATAP3Profile +from .dcat_ap.es_dcat_ap_2 import EsDCATAP2Profile + +# GeoDCAT-AP Profiles +from .geodcat_ap.eu_geodcat_ap_2 import EuGeoDCATAP2Profile +from .geodcat_ap.eu_geodcat_ap_3 import EuGeoDCATAP3Profile + + +__all__ = [ + # Custom compatibilty profile meant to add support for ckanext-scheming + 'EuDCATAPSchemingDCATProfile', + + # DCAT-AP profiles + 'EuDCATAP2Profile', + 'EuDCATAP3Profile', + + # GeoDCAT-AP profiles + 'EuGeoDCATAP2Profile', + 'EuGeoDCATAP3Profile' + + # Spanish profiles + 'EsNTIRISPProfile', + 'EsDCATAP2Profile', +] \ No newline at end of file diff --git a/ckanext/schemingdcat/profiles/base.py b/ckanext/schemingdcat/profiles/base.py new file mode 100644 index 0000000..357dd4e --- /dev/null +++ b/ckanext/schemingdcat/profiles/base.py @@ -0,0 +1,617 @@ +import re +import logging +import json + +from rdflib import term, URIRef, Literal + +from ckantoolkit import config, get_action + +from ckanext.dcat.profiles.base import RDFProfile, URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.helpers import get_langs +from ckanext.schemingdcat.codelists import load_inspire_csv_codelists +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + RDFS, + SKOS, + ELI, + EUROVOC, + DCAT, + DC, + DCT, + DCAT, + DCATAP, + ADMS, + VCARD, + FOAF, + SCHEMA, + TIME, + LOCN, + GSP, + OWL, + SPDX, + CNT, + # Default values + eu_dcat_ap_default_values, + ) + +# INSPIRE Codelists +codelists = load_inspire_csv_codelists() +MD_INSPIRE_REGISTER = codelists["MD_INSPIRE_REGISTER"] +MD_FORMAT = codelists["MD_FORMAT"] +MD_ES_THEMES = codelists["MD_ES_THEMES"] +MD_EU_THEMES = codelists["MD_EU_THEMES"] +MD_EU_LANGUAGES = codelists["MD_EU_LANGUAGES"] +MD_ES_FORMATS = codelists["MD_ES_FORMATS"] + +namespaces = { + "dc": DC, + "dct": DCT, + "dcat": DCAT, + "dcatap": DCATAP, + "adms": ADMS, + "vcard": VCARD, + "foaf": FOAF, + "schema": SCHEMA, + "time": TIME, + "skos": SKOS, + "locn": LOCN, + "gsp": GSP, + "owl": OWL, + "cnt": CNT, + "spdx": SPDX, +} + +default_lang = config.get("ckan.locale_default", "en") + +log = logging.getLogger(__name__) + + +class SchemingDCATRDFProfile(RDFProfile): + """ + A custom ckanext-dcat Base RDF Profile for the ckanext-schemingdcat extension. https://github.com/ckan/ckanext-dcat/blob/master/ckanext/dcat/profiles/base.py + + Notes: + **RDFProfile**: Base class with helper methods for implementing RDF parsing profiles + + This class should not be used directly, but rather extended to create + custom profiles + + """ + + # ckanext-schemingdcat profiles: INSPIRE/DCAT Themes. + def _themes(self, dataset_ref): + """ + Returns all DCAT themes on a particular dataset + """ + # Precompile regular expressions for faster matching + data_es_pattern = re.compile(r"https?://datos\.gob\.es/") + inspire_eu_pattern = re.compile(r"https?://inspire\.ec\.europa\.eu/theme") + themes = set() + + for theme in self._object_value_list(dataset_ref, DCAT.theme): + theme = theme.replace("https://", "http://") + + if data_es_pattern.match(theme): + themes.add(theme) + if theme: + theme_es_dcat_ap = self._search_value_codelist(MD_ES_THEMES, theme, "id","dcat_ap") or None + themes.add(theme_es_dcat_ap) + + elif inspire_eu_pattern.match(theme): + themes.add(theme) + if theme: + theme_eu_dcat_ap = self._search_value_codelist(MD_EU_THEMES, theme, "id","dcat_ap") or None + themes.add(theme_eu_dcat_ap) + + return themes + + # Add multilang to methods + def _object_value(self, subject, predicate, multilang=False): + """ + Given a subject and a predicate, returns the value of the object + + Both subject and predicate must be rdflib URIRef or BNode objects + + If found, the string representation is returned, else an empty string + """ + lang_dict = {} + fallback = "" + + for o in self.g.objects(subject, predicate): + if isinstance(o, Literal): + if o.language and o.language == default_lang: + return str(o) + if multilang and o.language: + lang_dict[o.language] = str(o) + elif multilang: + lang_dict[default_lang] = str(o) + else: + return str(o) + if multilang: + # when translation does not exist, create an empty one + for lang in get_langs(): + if lang not in lang_dict: + lang_dict[lang] = "" + return lang_dict + # Use first object as fallback if no object with the default language is available + elif fallback == "": + fallback = str(o) + else: + return str(o) + return fallback + + # Improve publisher/contact details + def _publisher(self, subject, predicate): + """ + Returns a dict with details about a dct:publisher entity, a foaf:Agent + + Both subject and predicate must be rdflib URIRef or BNode objects + + Examples: + + + + Publishing Organization for dataset 1 + contact@some.org + http://some.org + + EA349s92 + + + + { + 'uri': 'http://orgs.vocab.org/some-org', + 'name': 'Publishing Organization for dataset 1', + 'email': 'contact@some.org', + 'url': 'http://some.org', + 'type': 'http://purl.org/adms/publishertype/NonProfitOrganisation', + 'identifier': 'EA349s92' + } + + + + { + 'uri': 'http://publications.europa.eu/resource/authority/corporate-body/EURCOU' + } + + Returns keys for uri, name, email, url and type with the values set to + an empty string if they could not be found + """ + + publisher = {} + + for agent in self.g.objects(subject, predicate): + + publisher["uri"] = str(agent) if isinstance(agent, term.URIRef) else "" + + publisher["name"] = self._object_value(agent, FOAF.name) + + publisher["email"] = self._object_value(agent, FOAF.mbox) + + publisher["url"] = self._object_value(agent, FOAF.homepage) + + publisher["type"] = self._object_value(agent, DCT.type) + + publisher["identifier"] = self._object_value(agent, DCT.identifier) + + return publisher + + def _contact_details(self, subject, predicate): + """ + Returns a dict with details about a vcard expression + + Both subject and predicate must be rdflib URIRef or BNode objects + + Examples: + + + + Contact Point for dataset 1 + + http://some.org + pointOfContact + + + + { + 'uri': 'http://orgs.vocab.org/some-org', + 'name': 'Contact Point for dataset 1', + 'email': 'contact@some.org', + 'url': 'http://some.org', + 'role': 'pointOfContact', + } + + Returns keys for uri, name, email and url with the values set to + an empty string if they could not be found + """ + + contact = {} + + for agent in self.g.objects(subject, predicate): + + contact["uri"] = str(agent) if isinstance(agent, term.URIRef) else "" + + contact["name"] = self._get_vcard_property_value( + agent, VCARD.hasFN, VCARD.fn + ) + + contact["url"] = self._get_vcard_property_value( + agent, VCARD.hasURL + ) + + contact["role"] = self._get_vcard_property_value( + agent, VCARD.role + ) + + contact["email"] = self._without_mailto( + self._get_vcard_property_value(agent, VCARD.hasEmail) + ) + + return contact + + def _author(self, subject, predicate): + """ + Returns a dict with details about a dct:creator entity, a foaf:Person + + Both subject and predicate must be rdflib URIRef or BNode objects + + Examples: + + + + Author Name + author@some.org + http://author.org + + + + { + 'uri': 'http://people.vocab.org/some-person', + 'name': 'Author Name', + 'email': 'author@some.org', + 'url': 'http://author.org', + } + + + + { + 'uri': 'http://people.vocab.org/another-person' + } + + Returns keys for uri, name, email, url, and identifier with the values set to + an empty string if they could not be found + """ + + author = {} + + for person in self.g.objects(subject, predicate): + + author["uri"] = str(person) if isinstance(person, term.URIRef) else "" + + author["name"] = self._object_value(person, FOAF.name) + + author["email"] = self._object_value(person, FOAF.mbox) + + author["url"] = self._object_value(person, FOAF.homepage) + + return author + + # ckanext-schemingdcat: codelists functions + def _search_values_codelist_add_to_graph(self, metadata_codelist, labels, dataset_dict, dataset_ref, dataset_tag_base, g, dcat_property): + # Create a dictionary with label as key and id as value for each element in metadata_codelist + inspire_dict = {row["label"].lower(): row.get("id", row.get("value")) for row in metadata_codelist} + + # Check if labels is a list, if not, convert it to a list + if not isinstance(labels, list): + labels = [labels] + + for label in labels: + if label not in self._get_dataset_value(dataset_dict, "topic"): + # Check if tag_name is in inspire_dict + if label.lower() in inspire_dict: + tag_val = inspire_dict[label.lower()] + else: + tag_val = f"{dataset_tag_base}/dataset/?tags={label}" + g.add((dataset_ref, dcat_property, URIRefOrLiteral(tag_val))) + + def dict_to_list(self, value): + """Converts a dictionary to a list of its values. + + Args: + value: The value to convert. + + Returns: + If the value is a dictionary, returns a list of its values. Otherwise, returns the value unchanged. + """ + if isinstance(value, dict): + value = list(value.values()) + return value + + def _get_localized_dataset_value(self, multilang_dict, default=None): + """Returns a localized dataset multilang_dict. + + Args: + multilang_dict: A string or dictionary representing the multilang_dict to localize. + default: A default value to return if the multilang_dict cannot be localized. + + Returns: + A dictionary representing the localized multilang_dict, or the default value if the multilang_dict cannot be localized. + + Raises: + None. + """ + if isinstance(multilang_dict, dict): + return multilang_dict + + if isinstance(multilang_dict, str): + try: + multilang_dict = json.loads(multilang_dict) + except ValueError: + return default + + def _search_value_codelist(self, metadata_codelist, label, input_field_name, output_field_name, return_value=True): + """Searches for a value in a metadata codelist. + + Args: + metadata_codelist (list): A list of dictionaries containing the metadata codelist. + label (str): The label to search for in the codelist. + input_field_name (str): The name of the input field in the codelist. + output_field_name (str): The name of the output field in the codelist. + return_value (bool): Whether to return the label value if not found (True) or None if not found (False). Default is True. + + Returns: + str or None: The value found in the codelist, or None if not found and return_value is False. + """ + inspire_dict = {row[input_field_name].lower(): row[output_field_name] for row in metadata_codelist} + tag_val = inspire_dict.get(label.lower(), None) + if not return_value and tag_val is None: + return None + elif not return_value and tag_val: + return tag_val + elif return_value == True and tag_val is None: + return label + else: + return tag_val + + # Multilang management + def _add_date_triples_from_dict(self, _dict, subject, items): + self._add_triples_from_dict(_dict, subject, items, + date_value=True) + + def _add_list_triples_from_dict(self, _dict, subject, items): + self._add_triples_from_dict(_dict, subject, items, + list_value=True) + + def _add_triples_from_dict( + self, _dict, subject, items, list_value=False, date_value=False, multilang=False + ): + for item in items: + try: + if len(item) == 4: + key, predicate, fallbacks, _type = item + _class = None + required_lang = None + elif len(item) == 5: + key, predicate, fallbacks, _type, _class = item + required_lang = None + elif len(item) == 6: + key, predicate, fallbacks, _type, _class, required_lang = item + except ValueError: + key, predicate, fallbacks, _type = item + _class = None + required_lang = None + + self._add_triple_from_dict( + _dict, + subject, + predicate, + key, + fallbacks=fallbacks, + list_value=list_value, + date_value=date_value, + _type=_type, + _class=_class, + multilang=multilang, + required_lang=required_lang, + ) + + def _add_triple_from_dict( + self, + _dict, + subject, + predicate, + key, + fallbacks=None, + list_value=False, + date_value=False, + _type=Literal, + _datatype=None, + _class=None, + value_modifier=None, + multilang=False, + required_lang= None, + ): + """ + Adds a new triple to the graph with the provided parameters + + The subject and predicate of the triple are passed as the relevant + RDFLib objects (URIRef or BNode). As default, the object is a + literal value, which is extracted from the dict using the provided key + (see `_get_dict_value`). If the value for the key is not found, then + additional fallback keys are checked. + Using `value_modifier`, a function taking the extracted value and + returning a modified value can be passed. + If a value was found, the modifier is applied before adding the value. + + `_class` is the optional RDF class of the entity being added. + + If `list_value` or `date_value` are True, then the value is treated as + a list or a date respectively (see `_add_list_triple` and + `_add_date_triple` for details. + """ + value = self._get_dict_value(_dict, key) + if not value and fallbacks: + for fallback in fallbacks: + value = self._get_dict_value(_dict, fallback) + if value: + break + + # if a modifying function was given, apply it to the value + if value and callable(value_modifier): + value = value_modifier(value) + + if value and list_value: + self._add_list_triple(subject, predicate, value, _type, _datatype, _class) + elif value and date_value: + self._add_date_triple(subject, predicate, value, _type) + # if multilang is True, the value is a dict with language codes as keys + elif value and multilang: + self._add_multilang_triple(subject, predicate, value, required_lang) + elif value: + # Normal text value + # ensure URIRef items are preprocessed (space removal/url encoding) + if _type == URIRef: + _type = CleanedURIRef + if _datatype: + object = _type(value, datatype=_datatype) + else: + object = _type(value) + self.g.add((subject, predicate, object)) + + if _class and isinstance(object, URIRef): + self.g.add((object, RDF.type, _class)) + + # mjanez/ckanext-dcat. Multilang triples. + def _add_multilang_triple(self, subject, predicate, multilang_values, required_lang=None): + """ + Adds multilingual triples to the graph. + + This method processes the provided `multilang_values`, which can be a string, + dictionary, or any other value, and adds them to the RDF graph with the specified + language tags. If `required_lang` is provided, only values with the matching + language code are added. + + Args: + subject (URIRef or BNode): The subject of the RDF triple. + predicate (URIRef): The predicate of the RDF triple. + multilang_values (Union[str, dict, Any]): The multilingual values to be added. + This can be a JSON string, a dictionary with language codes as keys, or any other value. + required_lang (Optional[str]): The required language code. Only values with this + language code are added. If None, all values are added. + + Returns: + None + """ + # log.debug("subject: {1} and multilang_values: {0}".format(multilang_values, subject)) + # log.debug("required_lang: %s and multilang_values type: %s", required_lang, str(type(multilang_values))) + + if not multilang_values: + return + + if isinstance(multilang_values, str): + try: + multilang_values = json.loads(multilang_values) + except ValueError: + pass + + if isinstance(multilang_values, dict): + try: + for key, value in multilang_values.items(): + if value and value != "": + self.g.add((subject, predicate, Literal(value, lang=key))) + except (ValueError, KeyError): + self.g.add((subject, predicate, Literal(multilang_values))) + + else: + self.g.add((subject, predicate, Literal(multilang_values))) + + # Catalog class enhancements + def _get_catalog_field(self, field_name, default_values_dict=eu_dcat_ap_default_values, fallback=None, return_none=False, order="desc"): + """ + Returns the value of a field from the most recently modified dataset. + + Args: + field_name (str): The name of the field to retrieve from datasets list + default_values_dict (dict): A dictionary of default values to use if the field is not found. Defaults to eu_dcat_ap_default_values. + fallback (str): The name of the fallback field to retrieve if `field_name` is not found. Defaults to None. + return_none (bool): Whether to return None if the field is not found. Defaults to False. + order (str): The order in which to sort the results. Defaults to "desc". + + Returns: + The value of the field, or the default value if it could not be found and `return_none` is False. + + Notes: + This function caches the result of the CKAN API call to improve performance. The cache is stored in the `_catalog_search_result` attribute of the object. If the attribute exists, the function will return the value of the requested field from the cached result instead of making a new API call. If the attribute does not exist, the function will make a new API call and store the result in the attribute for future use. + """ + if not hasattr(self, "_catalog_search_result"): + context = { + "ignore_auth": True + } + self._catalog_search_result = get_action("package_search")(context, { + "sort": f"metadata_modified {order}", + "rows": 1, + }) + try: + if self._catalog_search_result and self._catalog_search_result.get("results"): + return self._catalog_search_result["results"][0][field_name] + except KeyError: + pass + if fallback: + try: + if self._catalog_search_result and self._catalog_search_result.get("results"): + return self._catalog_search_result["results"][0][fallback] + except KeyError: + pass + if return_none: + return None + return default_values_dict[field_name] + + def _get_catalog_dcat_theme(self): + """ + Returns the value of the `theme_es` field from the most recently created dataset, + or the value of the `theme_eu` field if `theme_es` is not present. + + Returns None if neither `theme_es` nor `theme_eu` are present in the dataset. + + Returns: + A string with the value of the `theme_es` or `theme_eu` field, or None if not found. + """ + context = { + "ignore_auth": True + } + result = get_action("package_search")(context, { + "sort": "metadata_created desc", + "rows": 1, + }) + if result and result.get("results"): + if "theme_es" in result["results"][0]: + return result["results"][0]["theme_es"][0] + elif "theme_eu" in result["results"][0]: + return result["results"][0]["theme_eu"][0] + return None + + def _get_catalog_language(self, default_values=eu_dcat_ap_default_values): + """ + Returns the value of the `language` field from the most recently modified dataset. + + Args: + default_values (dict): A dictionary of default values to use if the `publisher_uri` field cannot be found. + + Returns: + A string with the value of the `language` field, or None if it could not be found. + """ + context = { + "ignore_auth": True + } + result = get_action("package_search")(context, { + "sort": "metadata_modified desc", + "rows": 1, + }) + try: + if result and result.get("results"): + return result["results"][0]["language"] + + except KeyError: + return default_values["language"] \ No newline at end of file diff --git a/ckanext/schemingdcat/profiles/dcat/__init__.py b/ckanext/schemingdcat/profiles/dcat/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ckanext/schemingdcat/profiles/dcat/es_dcat.py b/ckanext/schemingdcat/profiles/dcat/es_dcat.py new file mode 100644 index 0000000..a024d2a --- /dev/null +++ b/ckanext/schemingdcat/profiles/dcat/es_dcat.py @@ -0,0 +1,473 @@ +import json +import logging + +from rdflib import URIRef, Literal +import ckantoolkit as toolkit + +from ckanext.dcat.utils import resource_uri +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + # Codelists + MD_ES_FORMATS, + # Namespaces + namespaces, +) +from ckanext.schemingdcat.profiles.dcat_ap.eu_dcat_ap import EuDCATAPProfile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + DCAT, + DCATAP, + DC, + DCT, + XSD, + SCHEMA, + RDFS, + ADMS, + CNT, + FOAF, + # Default values + default_translated_fields, + es_dcat_default_values, + default_translated_fields_es_dcat, + ) + +config = toolkit.config + +DISTRIBUTION_LICENSE_FALLBACK_CONFIG = "ckanext.dcat.resource.inherit.license" + +log = logging.getLogger(__name__) + + +#TODO: Implement Spanish DCAT (NTI-RISP) profile +class EsNTIRISPProfile(EuDCATAPProfile): + """ + A custom RDF profile based on the NTI-RISP for data portals in Spain + + Default values for some fields: + + ckanext-dcat/ckanext/dcat/.profiles.default_config.py + + More information and specification: + + https://datos.gob.es/es/documentacion/normativa-de-ambito-nacional + https://datos.gob.es/es/documentacion/guia-de-aplicacion-de-la-norma-tecnica-de-interoperabilidad-de-reutilizacion-de + + """ + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + # NTI-RISP properties also applied to higher versions + dataset_dict = self._parse_dataset_nti_risp(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # NTI-RISP properties also applied to higher versions + self._graph_from_dataset_nti_risp(dataset_dict, dataset_ref) + + # NTI-RISP specific properties + self._graph_from_dataset_nti_risp_only(dataset_dict, dataset_ref) + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + # NTI-RISP catalog properties + self._graph_from_catalog_nti_risp(catalog_dict, catalog_ref) + + def _parse_dataset_nti_risp(self, dataset_dict, dataset_ref): + """ + Parses a CKAN dataset dictionary and generates an RDF graph. + + Args: + dataset_dict (dict): The dictionary containing the dataset metadata. + dataset_ref (URIRef): The URI of the dataset in the RDF graph. + + Returns: + dict: The updated dataset dictionary with the RDF metadata. + """ + # Call base super method for common properties + super().parse_dataset(dataset_dict, dataset_ref) + + # Lists + for key, predicate in ( + ('theme_es', DCAT.theme), + ('temporal_resolution', DCAT.temporalResolution), + ('is_referenced_by', DCT.isReferencedBy), + ): + values = self._object_value_list(dataset_ref, predicate) + if values: + dataset_dict['extras'].append({'key': key, + 'value': json.dumps(values)}) + # Temporal + start, end = self._time_interval(dataset_ref, DCT.temporal, dcat_ap_version=2) + if start: + self._insert_or_update_temporal(dataset_dict, 'temporal_start', start) + if end: + self._insert_or_update_temporal(dataset_dict, 'temporal_end', end) + + # Spatial + spatial = self._spatial(dataset_ref, DCT.spatial) + for key in ('bbox', 'centroid'): + self._add_spatial_to_dict(dataset_dict, key, spatial) + + # Resources + for distribution in self._distributions(dataset_ref): + distribution_ref = str(distribution) + for resource_dict in dataset_dict.get('resources', []): + # Match distribution in graph and distribution in resource dict + if resource_dict and distribution_ref == resource_dict.get('distribution_ref'): + # Simple values + for key, predicate in ( + ('availability', DCATAP.availability), + ('compress_format', DCAT.compressFormat), + ('package_format', DCAT.packageFormat), + ): + value = self._object_value(distribution, predicate) + if value: + resource_dict[key] = value + + # Access services + access_service_list = [] + + for access_service in self.g.objects(distribution, DCAT.accessService): + access_service_dict = {} + + # Simple values + for key, predicate in ( + ('availability', DCATAP.availability), + ('title', DCT.title), + ('endpoint_description', DCAT.endpointDescription), + ('license', DCT.license), + ('access_rights', DCT.accessRights), + ('description', DCT.description), + ): + value = self._object_value(access_service, predicate) + if value: + access_service_dict[key] = value + # List + for key, predicate in ( + ('endpoint_url', DCAT.endpointURL), + ('serves_dataset', DCAT.servesDataset), + ('resource_relation', DCT.relation), + ): + values = self._object_value_list(access_service, predicate) + if values: + access_service_dict[key] = values + + # Access service URI (explicitly show the missing ones) + access_service_dict['uri'] = (str(access_service) + if isinstance(access_service, URIRef) + else '') + + # Remember the (internal) access service reference for referencing in + # further profiles, e.g. for adding more properties + access_service_dict['access_service_ref'] = str(access_service) + + access_service_list.append(access_service_dict) + + if access_service_list: + resource_dict['access_services'] = json.dumps(access_service_list) + + return dataset_dict + + def _graph_from_dataset_nti_risp(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT properties carried forward to higher NTI-RISP versions + """ + + # Namespaces + self._bind_namespaces() + + g = self.g + + for prefix, namespace in namespaces.items(): + g.bind(prefix, namespace) + + g.add((dataset_ref, RDF.type, DCAT.Dataset)) + + # Translated fields + items = [( + default_translated_fields[key]['field_name'], + default_translated_fields[key]['rdf_predicate'], + default_translated_fields[key]['fallbacks'], + default_translated_fields[key]['_type'], + default_translated_fields[key]['required_lang'] + ) + for key in default_translated_fields_es_dcat + ] + self._add_triples_from_dict(dataset_dict, dataset_ref, items, multilang=True) + + + # Basic elements (Title, description, Dates) + basic_elements = [ + ('url', DCAT.landingPage, None, URIRef), + ] + + dates = [ + ('created', DCT.created, ['metadata_created'], Literal), + ('issued', DCT.issued, ['metadata_created'], Literal), + ('modified', DCT.modified, ['metadata_modified'], Literal), + ('valid', DCT.valid, None, Literal), + ] + + self._add_date_triples_from_dict(dataset_dict, dataset_ref, dates) + self._add_list_triples_from_dict(dataset_dict, dataset_ref, basic_elements) + + # NTI-RISP Core elements + items = { + 'notes': (DCT.description, es_dcat_default_values['notes']), + 'conforms_to_es': (DCT.conformsTo, es_dcat_default_values['conformance_es']), + 'identifier_uri': (DCT.identifier, dataset_ref), + 'license_url': (DCT.license, es_dcat_default_values['license_url']), + 'language_code': (DC.language, es_dcat_default_values['language_code'] or config.get('ckan.locale_default')), + 'spatial_uri': (DCT.spatial, es_dcat_default_values['spatial_uri']), + 'publisher_identifier_es': (DCT.publisher, es_dcat_default_values['publisher_identifier'] or dataset_dict['publisher_identifier']), + } + + self._add_dataset_triples_from_dict(dataset_dict, dataset_ref, items) + + # Lists + dataset_dict['tags'] = [tag['name'].replace(" ", "").lower() for tag in dataset_dict.get('tags', [])] + + # Lists NTI-RISP Core + items_list = [ + ('reference', DCT.references, None, URIRefOrLiteral), + ('tags', DCAT.keyword, None, Literal), + ('theme_es', DCAT.theme, es_dcat_default_values['theme_es'], URIRefOrLiteral), + ] + + #Lists DCAT-AP Extension + items_dcatap_list = [ + ('conforms_to', DCT.conformsTo, None, URIRef), + ('metadata_profile', DCT.conformsTo, None, URIRef), + ] + + items_list.extend(items_dcatap_list) + self._add_list_triples_from_dict(dataset_dict, dataset_ref, items_list) + + #FIXME Frequency - Frecuencia ('frequency', DCT.accrualPeriodicity, None, URIRefOrLiteral): https://github.com/ctt-gob-es/datos.gob.es/blob/30c4a0d97356e0caf948aff2bb74790f4885c67f/ckan/ckanext-dge-harvest/ckanext/dge_harvest/profiles.py#L2508 + + # Temporal - Cobertura temporal + self._temporal_graph(dataset_dict, dataset_ref) + + # Use fallback license if set in config + resource_license_fallback = None + if toolkit.asbool(config.get(DISTRIBUTION_LICENSE_FALLBACK_CONFIG, False)): + if "license_id" in dataset_dict and isinstance( + URIRefOrLiteral(dataset_dict["license_id"]), URIRef + ): + resource_license_fallback = dataset_dict["license_id"] + elif "license_url" in dataset_dict and isinstance( + URIRefOrLiteral(dataset_dict["license_url"]), URIRef + ): + resource_license_fallback = dataset_dict["license_url"] + + # Resources + for resource_dict in dataset_dict.get('resources', []): + + distribution = CleanedURIRef(resource_uri(resource_dict)) + + g.add((dataset_ref, DCAT.distribution, distribution)) + + g.add((distribution, RDF.type, DCAT.Distribution)) + + # NTI-RISP Core elements + items = { + 'url': (DCAT.accessURL, None), + 'name': (DCT.title, None), + 'description': (DCT.description, es_dcat_default_values['description']), + 'language_code': (DC.language, es_dcat_default_values['language_code'] or config.get('ckan.locale_default')), + 'license': (DCT.license, es_dcat_default_values['license']), + 'identifier_uri': (DCT.identifier, distribution), + 'size': (DCT.byteSize, None), + } + + if resource_license_fallback and not (distribution, DCT.license, None) in g: + g.add( + ( + distribution, + DCT.license, + URIRefOrLiteral(resource_license_fallback), + ) + ) + + self._add_dataset_triples_from_dict(resource_dict, distribution, items) + + # Lists + items_lists = [ + ('resource_relation', DCT.relation, None, URIRef), + ] + + self._add_list_triples_from_dict(resource_dict, distribution, items_lists) + + # Format/Mimetype - Formato de la distribución + self._distribution_format(resource_dict, distribution) + + + def _graph_from_dataset_nti_risp_only(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT v2 specific properties (not applied to higher versions) + """ + pass + + def _graph_from_catalog_nti_risp(self, catalog_dict, catalog_ref): + """ + NTI-RISP Catalog properties + """ + g = self.g + + for prefix, namespace in namespaces.items(): + g.bind(prefix, namespace) + + g.add((catalog_ref, RDF.type, DCAT.Catalog)) + + # Basic fields + license, publisher_identifier, access_rights, spatial_uri, language_code = [ + self._get_catalog_field(field_name='license_url', fallback='license_id', default_values_dict=es_dcat_default_values), + es_dcat_default_values['publisher_identifier'] or self._get_catalog_field(field_name='publisher_identifier', default_values_dict=es_dcat_default_values), + self._get_catalog_field(field_name='access_rights', default_values_dict=es_dcat_default_values), + self._get_catalog_field(field_name='spatial_uri', default_values_dict=es_dcat_default_values), + es_dcat_default_values['language_code'] or config.get('ckan.locale_default') + ] + + # Mandatory elements by NTI-RISP (datos.gob.es) + items_core = [ + ('title', DCT.title, config.get('ckan.site_title'), Literal), + ('description', DCT.description, config.get('ckan.site_description'), Literal), + ('publisher_identifier', DCT.publisher, publisher_identifier, URIRef), + ('identifier', DCT.identifier, f'{config.get("ckan_url")}/catalog.rdf', Literal), + ('encoding', CNT.characterEncoding, 'UTF-8', Literal), + ('language_code', DC.language, language_code, URIRefOrLiteral), + ('spatial_uri', DCT.spatial, spatial_uri, URIRefOrLiteral), + ('theme_taxonomy', DCAT.themeTaxonomy, es_dcat_default_values['theme_taxonomy'], URIRef), + ('homepage', FOAF.homepage, config.get('ckan_url'), URIRef), + ] + + # DCAT-AP extension + items_dcatap = [ + ('license', DCT.license, license, URIRef), + ('conforms_to', DCT.conformsTo, es_dcat_default_values['conformance_es'], URIRef), + ('access_rights', DCT.accessRights, access_rights, URIRefOrLiteral), + ] + + items_core.extend(items_dcatap) + + for item in items_core: + key, predicate, fallback, _type = item + value = catalog_dict.get(key, fallback) if catalog_dict else fallback + if value: + g.add((catalog_ref, predicate, _type(value))) + + #TODO: Tamaño del catálogo - dct:extent + + # Dates + modified = self._get_catalog_field(field_name='metadata_modified', default_values_dict=es_dcat_default_values) + issued = self._get_catalog_field(field_name='metadata_created', default_values_dict=es_dcat_default_values, order='asc') + if modified or issued or license: + if modified: + self._add_date_triple(catalog_ref, DCT.modified, modified) + if issued: + self._add_date_triple(catalog_ref, DCT.issued, issued) + + def _add_dataset_triples_from_dict(self, dataset_dict, dataset_ref, items): + """Adds triples to the RDF graph for the given dataset. + + Args: + dataset_dict (dict): A dictionary containing the dataset metadata. + dataset_ref (rdflib.URIRef): The URI reference for the dataset. + items (dict): A dictionary containing the keys and values for the metadata items. + + Returns: + None + + """ + + for key, (predicate, default_value) in items.items(): + value = dataset_dict.get(key, default_value) + if value is not None: + self.g.add((dataset_ref, predicate, URIRefOrLiteral(value))) + + def _bind_namespaces(self): + self.g.namespace_manager.bind('schema', namespaces['schema'], replace=True) + + def _temporal_graph(self, dataset_dict, dataset_ref): + """Adds the dct:temporal triple to the RDF graph for the given dataset. + + Args: + dataset_dict (dict): A dictionary containing the dataset metadata. + dataset_ref (rdflib.URIRef): The URI reference for the dataset. + + Returns: + None + + """ + # Temporal + start = self._get_dataset_value(dataset_dict, 'temporal_start') + end = self._get_dataset_value(dataset_dict, 'temporal_end') + + uid = 1 + + temporal_extent = URIRef( + "%s/%s-%s" % (dataset_ref, 'PeriodOfTime', uid)) + self.g.add((temporal_extent, RDF.type, DCT.PeriodOfTime)) + if start: + self._add_date_triple( + temporal_extent, SCHEMA.startDate, start) + if end: + self._add_date_triple( + temporal_extent, SCHEMA.endDate, end) + self.g.add((dataset_ref, DCT.temporal, temporal_extent)) + + def _distribution_format(self, resource_dict, distribution): + """ + Generates an RDF triple for the format of a resource. + + Args: + mime_type (str): The MIME type of the format. + label (str): The label of the format. + + Returns: + str: The RDF triple for the format. + """ + resource_format = resource_dict.get('format', es_dcat_default_values['format_es']) + + format_es = self._search_value_codelist(MD_ES_FORMATS, resource_format, 'label','label', False) or es_dcat_default_values['format_es'] + mime_type = self._search_value_codelist(MD_ES_FORMATS, format_es, 'label','id') or es_dcat_default_values['mimetype_es'] + + if format_es: + imt = URIRef("%s/format" % distribution) + self.g.add((imt, RDF.type, DCT.IMT)) + self.g.add((distribution, DCT['format'], imt)) + self.g.add((imt, RDFS.label, Literal(format_es))) + + if mime_type: + self.g.add((imt, RDF.value, Literal(mime_type))) + + def _check_resource_url(self, resource_url, distribution): + """ + Verifies if the URL of a resource is a download URL and adds the corresponding triple to the RDF graph. + + Args: + resource_url (str): The URL of the resource. + distribution (URIRef): The URI of the distribution in the RDF graph. + + Returns: + None + """ + + download_keywords = ['descarga', 'download', 'get', 'file', 'data', 'archive', 'zip', 'rar', 'tar', 'gz', 'tgz', '7z', 'exe', 'msi', 'dmg', 'pkg', 'deb', 'rpm', 'iso', 'img', 'bin', 'cue', 'torrent', 'magnet', 'shp', 'gpkg', 'tiff'] + + if any(keyword in resource_url.lower() for keyword in download_keywords): + self.g.add((distribution, DCAT.downloadURL, URIRef(resource_url))) + else: + self.g.add((distribution, DCAT.accessURL, URIRef(resource_url))) diff --git a/ckanext/schemingdcat/profiles/dcat_ap/__init__.py b/ckanext/schemingdcat/profiles/dcat_ap/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ckanext/schemingdcat/profiles/dcat_ap/es_dcat_ap_2.py b/ckanext/schemingdcat/profiles/dcat_ap/es_dcat_ap_2.py new file mode 100644 index 0000000..fa20490 --- /dev/null +++ b/ckanext/schemingdcat/profiles/dcat_ap/es_dcat_ap_2.py @@ -0,0 +1,440 @@ +import json +from decimal import Decimal, DecimalException + +from rdflib import URIRef, BNode, Literal + +from ckanext.dcat.utils import resource_uri +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + # Codelists + MD_INSPIRE_REGISTER, + MD_FORMAT, + MD_EU_LANGUAGES, +) +from ckanext.schemingdcat.profiles.eu_dcat_ap_base import BaseEuDCATAPProfile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + DCAT, + DCATAP, + DCT, + XSD, + SCHEMA, + RDFS, + ADMS, + CNT, + ELI, + EUROVOC, + # Default values + metadata_field_names, + eu_dcat_ap_default_values, + es_dcat_default_values, + default_translated_fields, + default_translated_fields_es_dcat, + ) + +#TODO: Implement Spanish DCAT-AP 2 profile +class EsDCATAP2Profile(BaseEuDCATAPProfile): + """ + A custom RDF profile based on the DCAT-AP 2 for data portals in Europe + + Default values for some fields: + + ckanext-dcat/ckanext/dcat/.profiles.default_config.py + + More information and specification: + + https://joinup.ec.europa.eu/asset/dcat_application_profile + + """ + + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + dataset_dict = self._parse_dataset_v2(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + self._graph_from_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 specific properties + self._graph_from_dataset_v2_only(dataset_dict, dataset_ref) + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + def _parse_dataset_v2(self, dataset_dict, dataset_ref): + """ + DCAT -> CKAN properties carried forward to higher DCAT-AP versions + """ + + # Call base super method for common properties + super().parse_dataset(dataset_dict, dataset_ref) + + # Basic fields + for key, predicate in ( + ('encoding', CNT.characterEncoding), + ): + value = self._object_value(dataset_ref, predicate) + if value: + dataset_dict[key] = value + + # Standard values + value = self._object_value(dataset_ref, DCAT.temporalResolution) + if value: + dataset_dict["extras"].append( + {"key": "temporal_resolution", "value": value} + ) + + # Lists + for key, predicate in ( + ("is_referenced_by", DCT.isReferencedBy), + ("applicable_legislation", DCATAP.applicableLegislation), + ("hvd_category", DCATAP.hvdCategory), + ): + values = self._object_value_list(dataset_ref, predicate) + if values: + dataset_dict["extras"].append({"key": key, "value": json.dumps(values)}) + # Temporal + start, end = self._time_interval(dataset_ref, DCT.temporal, dcat_ap_version=2) + if start: + self._insert_or_update_temporal(dataset_dict, "temporal_start", start) + if end: + self._insert_or_update_temporal(dataset_dict, "temporal_end", end) + + # Spatial + spatial = self._spatial(dataset_ref, DCT.spatial) + for key in ("bbox", "centroid"): + self._add_spatial_to_dict(dataset_dict, key, spatial) + + # Spatial resolution in meters + spatial_resolution = self._object_value_float_list( + dataset_ref, DCAT.spatialResolutionInMeters + ) + if spatial_resolution: + # For some reason we incorrectly allowed lists in this property at + # some point, keep support for it but default to single value + value = ( + spatial_resolution[0] + if len(spatial_resolution) == 1 + else json.dumps(spatial_resolution) + ) + dataset_dict["extras"].append( + { + "key": "spatial_resolution_in_meters", + "value": value, + } + ) + + # Resources + for distribution in self._distributions(dataset_ref): + distribution_ref = str(distribution) + for resource_dict in dataset_dict.get("resources", []): + # Match distribution in graph and distribution in resource dict + if resource_dict and distribution_ref == resource_dict.get( + "distribution_ref" + ): + # Simple values + for key, predicate in ( + ("availability", DCATAP.availability), + ("compress_format", DCAT.compressFormat), + ("package_format", DCAT.packageFormat), + ): + value = self._object_value(distribution, predicate) + if value: + resource_dict[key] = value + + # Lists + for key, predicate in ( + ("applicable_legislation", DCATAP.applicableLegislation), + ): + values = self._object_value_list(distribution, predicate) + if values: + resource_dict[key] = json.dumps(values) + + # Access services + access_service_list = [] + + for access_service in self.g.objects( + distribution, DCAT.accessService + ): + access_service_dict = {} + + # Simple values + for key, predicate in ( + ("availability", DCATAP.availability), + ("title", DCT.title), + ("endpoint_description", DCAT.endpointDescription), + ("license", DCT.license), + ("access_rights", DCT.accessRights), + ("description", DCT.description), + ): + value = self._object_value(access_service, predicate) + if value: + access_service_dict[key] = value + # List + for key, predicate in ( + ("endpoint_url", DCAT.endpointURL), + ("serves_dataset", DCAT.servesDataset), + ): + values = self._object_value_list(access_service, predicate) + if values: + access_service_dict[key] = values + + # Access service URI (explicitly show the missing ones) + access_service_dict["uri"] = ( + str(access_service) + if isinstance(access_service, URIRef) + else "" + ) + + # Remember the (internal) access service reference for + # referencing in further profiles, e.g. for adding more + # properties + access_service_dict["access_service_ref"] = str(access_service) + + access_service_list.append(access_service_dict) + + if access_service_list: + resource_dict["access_services"] = json.dumps( + access_service_list + ) + + return dataset_dict + + def _graph_from_dataset_v2(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT properties carried forward to higher DCAT-AP versions + """ + + # Standard values + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + DCAT.temporalResolution, + "temporal_resolution", + _datatype=XSD.duration, + ) + + # Lists + for key, predicate, fallbacks, type, datatype, _class in ( + ( + "is_referenced_by", + DCT.isReferencedBy, + None, + URIRefOrLiteral, + None, + RDFS.Resource, + ), + ( + "applicable_legislation", + DCATAP.applicableLegislation, + None, + URIRefOrLiteral, + None, + ELI.LegalResource, + ), + ("hvd_category", DCATAP.hvdCategory, None, URIRefOrLiteral, None, None), + ): + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + predicate, + key, + list_value=True, + fallbacks=fallbacks, + _type=type, + _datatype=datatype, + _class=_class, + ) + + # Temporal + + # The profile for DCAT-AP 1 stored triples using schema:startDate, + # remove them to avoid duplication + for temporal in self.g.objects(dataset_ref, DCT.temporal): + if SCHEMA.startDate in [t for t in self.g.predicates(temporal, None)]: + self.g.remove((temporal, None, None)) + self.g.remove((dataset_ref, DCT.temporal, temporal)) + + start = self._get_dataset_value(dataset_dict, "temporal_start") + end = self._get_dataset_value(dataset_dict, "temporal_end") + if start or end: + temporal_extent_dcat = BNode() + + self.g.add((temporal_extent_dcat, RDF.type, DCT.PeriodOfTime)) + if start: + self._add_date_triple(temporal_extent_dcat, DCAT.startDate, start) + if end: + self._add_date_triple(temporal_extent_dcat, DCAT.endDate, end) + self.g.add((dataset_ref, DCT.temporal, temporal_extent_dcat)) + + # spatial + spatial_bbox = self._get_dataset_value(dataset_dict, "spatial_bbox") + spatial_cent = self._get_dataset_value(dataset_dict, "spatial_centroid") + + if spatial_bbox or spatial_cent: + spatial_ref = self._get_or_create_spatial_ref(dataset_dict, dataset_ref) + + if spatial_bbox: + self._add_spatial_value_to_graph(spatial_ref, DCAT.bbox, spatial_bbox) + + if spatial_cent: + self._add_spatial_value_to_graph( + spatial_ref, DCAT.centroid, spatial_cent + ) + + # Spatial resolution in meters + spatial_resolution_in_meters = self._read_list_value( + self._get_dataset_value(dataset_dict, "spatial_resolution_in_meters") + ) + if spatial_resolution_in_meters: + for value in spatial_resolution_in_meters: + try: + self.g.add( + ( + dataset_ref, + DCAT.spatialResolutionInMeters, + Literal(Decimal(value), datatype=XSD.decimal), + ) + ) + except (ValueError, TypeError, DecimalException): + self.g.add( + (dataset_ref, DCAT.spatialResolutionInMeters, Literal(value)) + ) + + # Resources + for resource_dict in dataset_dict.get("resources", []): + + distribution = CleanedURIRef(resource_uri(resource_dict)) + + # Simple values + items = [ + ("availability", DCATAP.availability, None, URIRefOrLiteral), + ( + "compress_format", + DCAT.compressFormat, + None, + URIRefOrLiteral, + DCT.MediaType, + ), + ( + "package_format", + DCAT.packageFormat, + None, + URIRefOrLiteral, + DCT.MediaType, + ), + ] + + self._add_triples_from_dict(resource_dict, distribution, items) + + # Lists + items = [ + ( + "applicable_legislation", + DCATAP.applicableLegislation, + None, + URIRefOrLiteral, + ELI.LegalResource, + ), + ] + self._add_list_triples_from_dict(resource_dict, distribution, items) + + # Access services + access_service_list = resource_dict.get("access_services", []) + if isinstance(access_service_list, str): + try: + access_service_list = json.loads(access_service_list) + except ValueError: + access_service_list = [] + + for access_service_dict in access_service_list: + + access_service_uri = access_service_dict.get("uri") + if access_service_uri: + access_service_node = CleanedURIRef(access_service_uri) + else: + access_service_node = BNode() + # Remember the (internal) access service reference for referencing + # in further profiles + access_service_dict["access_service_ref"] = str(access_service_node) + + self.g.add((distribution, DCAT.accessService, access_service_node)) + + self.g.add((access_service_node, RDF.type, DCAT.DataService)) + + # Simple values + items = [ + ("availability", DCATAP.availability, None, URIRefOrLiteral), + ("license", DCT.license, None, URIRefOrLiteral), + ("access_rights", DCT.accessRights, None, URIRefOrLiteral), + ("title", DCT.title, None, Literal), + ( + "endpoint_description", + DCAT.endpointDescription, + None, + URIRefOrLiteral, + RDFS.Resource, + ), + ("description", DCT.description, None, Literal), + ] + + self._add_triples_from_dict( + access_service_dict, access_service_node, items + ) + + # Lists + items = [ + ( + "endpoint_url", + DCAT.endpointURL, + None, + URIRefOrLiteral, + RDFS.Resource, + ), + ("serves_dataset", DCAT.servesDataset, None, URIRefOrLiteral), + ] + self._add_list_triples_from_dict( + access_service_dict, access_service_node, items + ) + + # DCAT-AP: http://publications.europa.eu/en/web/eu-vocabularies/at-dataset/-/resource/dataset/access-right + access_rights = self._get_resource_value(resource_dict, 'access_rights') + if access_rights and 'authority/access-right' in access_rights: + access_rights_uri = URIRef(access_rights) + else: + access_rights_uri = URIRef(eu_dcat_ap_default_values['access_rights']) + self.g.add((distribution, DCT.accessRights, access_rights_uri)) + + if access_service_list: + resource_dict["access_services"] = json.dumps(access_service_list) + + def _graph_from_dataset_v2_only(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT v2 specific properties (not applied to higher versions) + """ + + # Other identifiers (these are handled differently in the + # DCAT-AP v3 profile) + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + ADMS.identifier, + "alternate_identifier", + list_value=True, + _type=URIRefOrLiteral, + _class=ADMS.Identifier, + ) diff --git a/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap.py b/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap.py new file mode 100644 index 0000000..55ad1bc --- /dev/null +++ b/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap.py @@ -0,0 +1,57 @@ +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + ADMS, + ) +from ckanext.schemingdcat.profiles.eu_dcat_ap_base import BaseEuDCATAPProfile + +class EuDCATAPProfile(BaseEuDCATAPProfile): + """ + An RDF profile based on the DCAT-AP v1 for data portals in Europe + + Default values for some fields: + + ckanext-dcat/ckanext/dcat/.profiles.default_config.py + + More information and specification: + + https://joinup.ec.europa.eu/asset/dcat_application_profile + + """ + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v1 specific properties + self._graph_from_dataset_v1_only(dataset_dict, dataset_ref) + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + def _graph_from_dataset_v1_only(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT v1 specific properties (not applied to higher versions) + """ + + # Other identifiers (these are handled differently in the + # DCAT-AP v3 profile) + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + ADMS.identifier, + "alternate_identifier", + list_value=True, + _type=URIRefOrLiteral, + _class=ADMS.Identifier, + ) diff --git a/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap_2.py b/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap_2.py new file mode 100644 index 0000000..3145880 --- /dev/null +++ b/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap_2.py @@ -0,0 +1,437 @@ +import json +from decimal import Decimal, DecimalException + +from rdflib import URIRef, BNode, Literal + +from ckanext.dcat.utils import resource_uri +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + # Codelists + MD_INSPIRE_REGISTER, + MD_FORMAT, + MD_EU_LANGUAGES, +) +from ckanext.schemingdcat.profiles.eu_dcat_ap_base import BaseEuDCATAPProfile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + DCAT, + DCATAP, + DCT, + XSD, + SCHEMA, + RDFS, + ADMS, + CNT, + ELI, + # Default values + metadata_field_names, + eu_dcat_ap_default_values, + ) + + + +class EuDCATAP2Profile(BaseEuDCATAPProfile): + """ + A custom RDF profile based on the DCAT-AP 2 for data portals in Europe + + Default values for some fields: + + ckanext-dcat/ckanext/dcat/.profiles.default_config.py + + More information and specification: + + https://joinup.ec.europa.eu/asset/dcat_application_profile + + """ + + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + dataset_dict = self._parse_dataset_v2(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + self._graph_from_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 specific properties + self._graph_from_dataset_v2_only(dataset_dict, dataset_ref) + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + def _parse_dataset_v2(self, dataset_dict, dataset_ref): + """ + DCAT -> CKAN properties carried forward to higher DCAT-AP versions + """ + + # Call base super method for common properties + super().parse_dataset(dataset_dict, dataset_ref) + + # Basic fields + for key, predicate in ( + ('encoding', CNT.characterEncoding), + ): + value = self._object_value(dataset_ref, predicate) + if value: + dataset_dict[key] = value + + # Standard values + value = self._object_value(dataset_ref, DCAT.temporalResolution) + if value: + dataset_dict["extras"].append( + {"key": "temporal_resolution", "value": value} + ) + + # Lists + for key, predicate in ( + ("is_referenced_by", DCT.isReferencedBy), + ("applicable_legislation", DCATAP.applicableLegislation), + ("hvd_category", DCATAP.hvdCategory), + ): + values = self._object_value_list(dataset_ref, predicate) + if values: + dataset_dict["extras"].append({"key": key, "value": json.dumps(values)}) + # Temporal + start, end = self._time_interval(dataset_ref, DCT.temporal, dcat_ap_version=2) + if start: + self._insert_or_update_temporal(dataset_dict, "temporal_start", start) + if end: + self._insert_or_update_temporal(dataset_dict, "temporal_end", end) + + # Spatial + spatial = self._spatial(dataset_ref, DCT.spatial) + for key in ("bbox", "centroid"): + self._add_spatial_to_dict(dataset_dict, key, spatial) + + # Spatial resolution in meters + spatial_resolution = self._object_value_float_list( + dataset_ref, DCAT.spatialResolutionInMeters + ) + if spatial_resolution: + # For some reason we incorrectly allowed lists in this property at + # some point, keep support for it but default to single value + value = ( + spatial_resolution[0] + if len(spatial_resolution) == 1 + else json.dumps(spatial_resolution) + ) + dataset_dict["extras"].append( + { + "key": "spatial_resolution_in_meters", + "value": value, + } + ) + + # Resources + for distribution in self._distributions(dataset_ref): + distribution_ref = str(distribution) + for resource_dict in dataset_dict.get("resources", []): + # Match distribution in graph and distribution in resource dict + if resource_dict and distribution_ref == resource_dict.get( + "distribution_ref" + ): + # Simple values + for key, predicate in ( + ("availability", DCATAP.availability), + ("compress_format", DCAT.compressFormat), + ("package_format", DCAT.packageFormat), + ): + value = self._object_value(distribution, predicate) + if value: + resource_dict[key] = value + + # Lists + for key, predicate in ( + ("applicable_legislation", DCATAP.applicableLegislation), + ): + values = self._object_value_list(distribution, predicate) + if values: + resource_dict[key] = json.dumps(values) + + # Access services + access_service_list = [] + + for access_service in self.g.objects( + distribution, DCAT.accessService + ): + access_service_dict = {} + + # Simple values + for key, predicate in ( + ("availability", DCATAP.availability), + ("title", DCT.title), + ("endpoint_description", DCAT.endpointDescription), + ("license", DCT.license), + ("access_rights", DCT.accessRights), + ("description", DCT.description), + ): + value = self._object_value(access_service, predicate) + if value: + access_service_dict[key] = value + # List + for key, predicate in ( + ("endpoint_url", DCAT.endpointURL), + ("serves_dataset", DCAT.servesDataset), + ): + values = self._object_value_list(access_service, predicate) + if values: + access_service_dict[key] = values + + # Access service URI (explicitly show the missing ones) + access_service_dict["uri"] = ( + str(access_service) + if isinstance(access_service, URIRef) + else "" + ) + + # Remember the (internal) access service reference for + # referencing in further profiles, e.g. for adding more + # properties + access_service_dict["access_service_ref"] = str(access_service) + + access_service_list.append(access_service_dict) + + if access_service_list: + resource_dict["access_services"] = json.dumps( + access_service_list + ) + + return dataset_dict + + def _graph_from_dataset_v2(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT properties carried forward to higher DCAT-AP versions + """ + + # Standard values + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + DCAT.temporalResolution, + "temporal_resolution", + _datatype=XSD.duration, + ) + + # Lists + for key, predicate, fallbacks, type, datatype, _class in ( + ( + "is_referenced_by", + DCT.isReferencedBy, + None, + URIRefOrLiteral, + None, + RDFS.Resource, + ), + ( + "applicable_legislation", + DCATAP.applicableLegislation, + None, + URIRefOrLiteral, + None, + ELI.LegalResource, + ), + ("hvd_category", DCATAP.hvdCategory, None, URIRefOrLiteral, None, None), + ): + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + predicate, + key, + list_value=True, + fallbacks=fallbacks, + _type=type, + _datatype=datatype, + _class=_class, + ) + + # Temporal + + # The profile for DCAT-AP 1 stored triples using schema:startDate, + # remove them to avoid duplication + for temporal in self.g.objects(dataset_ref, DCT.temporal): + if SCHEMA.startDate in [t for t in self.g.predicates(temporal, None)]: + self.g.remove((temporal, None, None)) + self.g.remove((dataset_ref, DCT.temporal, temporal)) + + start = self._get_dataset_value(dataset_dict, "temporal_start") + end = self._get_dataset_value(dataset_dict, "temporal_end") + if start or end: + temporal_extent_dcat = BNode() + + self.g.add((temporal_extent_dcat, RDF.type, DCT.PeriodOfTime)) + if start: + self._add_date_triple(temporal_extent_dcat, DCAT.startDate, start) + if end: + self._add_date_triple(temporal_extent_dcat, DCAT.endDate, end) + self.g.add((dataset_ref, DCT.temporal, temporal_extent_dcat)) + + # spatial + spatial_bbox = self._get_dataset_value(dataset_dict, "spatial_bbox") + spatial_cent = self._get_dataset_value(dataset_dict, "spatial_centroid") + + if spatial_bbox or spatial_cent: + spatial_ref = self._get_or_create_spatial_ref(dataset_dict, dataset_ref) + + if spatial_bbox: + self._add_spatial_value_to_graph(spatial_ref, DCAT.bbox, spatial_bbox) + + if spatial_cent: + self._add_spatial_value_to_graph( + spatial_ref, DCAT.centroid, spatial_cent + ) + + # Spatial resolution in meters + spatial_resolution_in_meters = self._read_list_value( + self._get_dataset_value(dataset_dict, "spatial_resolution_in_meters") + ) + if spatial_resolution_in_meters: + for value in spatial_resolution_in_meters: + try: + self.g.add( + ( + dataset_ref, + DCAT.spatialResolutionInMeters, + Literal(Decimal(value), datatype=XSD.decimal), + ) + ) + except (ValueError, TypeError, DecimalException): + self.g.add( + (dataset_ref, DCAT.spatialResolutionInMeters, Literal(value)) + ) + + # Resources + for resource_dict in dataset_dict.get("resources", []): + + distribution = CleanedURIRef(resource_uri(resource_dict)) + + # Simple values + items = [ + ("availability", DCATAP.availability, None, URIRefOrLiteral), + ( + "compress_format", + DCAT.compressFormat, + None, + URIRefOrLiteral, + DCT.MediaType, + ), + ( + "package_format", + DCAT.packageFormat, + None, + URIRefOrLiteral, + DCT.MediaType, + ), + ] + + self._add_triples_from_dict(resource_dict, distribution, items) + + # Lists + items = [ + ( + "applicable_legislation", + DCATAP.applicableLegislation, + None, + URIRefOrLiteral, + ELI.LegalResource, + ), + ] + self._add_list_triples_from_dict(resource_dict, distribution, items) + + # Access services + access_service_list = resource_dict.get("access_services", []) + if isinstance(access_service_list, str): + try: + access_service_list = json.loads(access_service_list) + except ValueError: + access_service_list = [] + + for access_service_dict in access_service_list: + + access_service_uri = access_service_dict.get("uri") + if access_service_uri: + access_service_node = CleanedURIRef(access_service_uri) + else: + access_service_node = BNode() + # Remember the (internal) access service reference for referencing + # in further profiles + access_service_dict["access_service_ref"] = str(access_service_node) + + self.g.add((distribution, DCAT.accessService, access_service_node)) + + self.g.add((access_service_node, RDF.type, DCAT.DataService)) + + # Simple values + items = [ + ("availability", DCATAP.availability, None, URIRefOrLiteral), + ("license", DCT.license, None, URIRefOrLiteral), + ("access_rights", DCT.accessRights, None, URIRefOrLiteral), + ("title", DCT.title, None, Literal), + ( + "endpoint_description", + DCAT.endpointDescription, + None, + URIRefOrLiteral, + RDFS.Resource, + ), + ("description", DCT.description, None, Literal), + ] + + self._add_triples_from_dict( + access_service_dict, access_service_node, items + ) + + # Lists + items = [ + ( + "endpoint_url", + DCAT.endpointURL, + None, + URIRefOrLiteral, + RDFS.Resource, + ), + ("serves_dataset", DCAT.servesDataset, None, URIRefOrLiteral), + ] + self._add_list_triples_from_dict( + access_service_dict, access_service_node, items + ) + + # DCAT-AP: http://publications.europa.eu/en/web/eu-vocabularies/at-dataset/-/resource/dataset/access-right + access_rights = self._get_resource_value(resource_dict, 'access_rights') + if access_rights and 'authority/access-right' in access_rights: + access_rights_uri = URIRef(access_rights) + else: + access_rights_uri = URIRef(eu_dcat_ap_default_values['access_rights']) + self.g.add((distribution, DCT.accessRights, access_rights_uri)) + + if access_service_list: + resource_dict["access_services"] = json.dumps(access_service_list) + + def _graph_from_dataset_v2_only(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT v2 specific properties (not applied to higher versions) + """ + + # Other identifiers (these are handled differently in the + # DCAT-AP v3 profile) + self._add_triple_from_dict( + dataset_dict, + dataset_ref, + ADMS.identifier, + "alternate_identifier", + list_value=True, + _type=URIRefOrLiteral, + _class=ADMS.Identifier, + ) diff --git a/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap_3.py b/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap_3.py new file mode 100644 index 0000000..ce66110 --- /dev/null +++ b/ckanext/schemingdcat/profiles/dcat_ap/eu_dcat_ap_3.py @@ -0,0 +1,95 @@ +import json +from decimal import Decimal, DecimalException + +from rdflib import URIRef, BNode, Literal + +from ckanext.dcat.utils import resource_uri +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + # Codelists + MD_INSPIRE_REGISTER, + MD_FORMAT, + MD_EU_LANGUAGES, +) + +from ckanext.schemingdcat.profiles.dcat_ap.eu_dcat_ap_2 import EuDCATAP2Profile +from ckanext.schemingdcat.profiles.eu_dcat_ap_scheming import EuDCATAPSchemingDCATProfile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + DCAT, + XSD, + SKOS, + ADMS, + RDF, + # Default values + metadata_field_names, + eu_dcat_ap_default_values, + ) + +#TODO: Implement DCAT-AP 3 profile +class EuDCATAP3Profile(EuDCATAP2Profile, EuDCATAPSchemingDCATProfile): + """ + A custom RDF profile based on the DCAT-AP 3 for data portals in Europe + + More information and specification: + + https://semiceu.github.io/DCAT-AP/releases/3.0.0/ + + """ + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + dataset_dict = self._parse_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 scheming fields + dataset_dict = self._parse_dataset_v2_scheming(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + self._graph_from_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 scheming fields + self._graph_from_dataset_v2_scheming(dataset_dict, dataset_ref) + + # DCAT AP v3 properties also applied to higher versions + self._graph_from_dataset_v3(dataset_dict, dataset_ref) + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + def _graph_from_dataset_v3(self, dataset_dict, dataset_ref): + + # byteSize decimal -> nonNegativeInteger + for subject, predicate, object in self.g.triples((None, DCAT.byteSize, None)): + if object and object.datatype == XSD.decimal: + self.g.remove((subject, predicate, object)) + + self.g.add( + ( + subject, + predicate, + Literal(int(object), datatype=XSD.nonNegativeInteger), + ) + ) + + # Other identifiers + value = self._get_dict_value(dataset_dict, "alternate_identifier") + if value: + items = self._read_list_value(value) + for item in items: + identifier = BNode() + self.g.add((dataset_ref, ADMS.identifier, identifier)) + self.g.add((identifier, RDF.type, ADMS.Identifier)) + self.g.add((identifier, SKOS.notation, Literal(item))) diff --git a/ckanext/schemingdcat/profiles/dcat_config.py b/ckanext/schemingdcat/profiles/dcat_config.py new file mode 100644 index 0000000..5e45de8 --- /dev/null +++ b/ckanext/schemingdcat/profiles/dcat_config.py @@ -0,0 +1,258 @@ +""" +This file contains default values for the SpanishDCATProfile and EuropeanDCATAPProfile profiles. +Default values are used to fill in missing metadata in resources. +Default values can be overridden in resource-specific metadata. + + metadata_field_names: dict + A dictionary containing the metadata field names for each profile. + + es_dcat_default_values: dict + A dictionary containing the default values for the SpanishDCATProfile. + + eu_dcat_ap_default_values: dict + A dictionary containing the default values for the EuropeanDCATAPProfile. + + default_translated_fields: dict + A dictionary containing the default translated fields for the ckanext-schemingdcat extension. +""" +from pathlib import Path + +from ckanext.dcat.profiles.base import ( + RDF, + RDFS, + SKOS, + XSD, + DCT, + ADMS, + GEOJSON_IMT, + Namespace, + Literal +) + +EUROVOC = Namespace("http://publications.europa.eu/ontology/euvoc#") +ELI = Namespace("http://data.europa.eu/eli/ontology#") +DC = Namespace("http://purl.org/dc/elements/1.1/") +DCAT = Namespace("http://www.w3.org/ns/dcat#") +DCATAP = Namespace("http://data.europa.eu/r5r/") +GEODCATAP = Namespace("http://data.europa.eu/930/") +VCARD = Namespace("http://www.w3.org/2006/vcard/ns#") +FOAF = Namespace("http://xmlns.com/foaf/0.1/") +SCHEMA = Namespace("http://schema.org/") +TIME = Namespace("http://www.w3.org/2006/time") +LOCN = Namespace("http://www.w3.org/ns/locn#") +GSP = Namespace("http://www.opengis.net/ont/geosparql#") +OWL = Namespace("http://www.w3.org/2002/07/owl#") +SPDX = Namespace("http://spdx.org/rdf/terms#") +CNT = Namespace("http://www.w3.org/2011/content#") + +CODELISTS_DIR = Path(__file__).resolve().parent.parent / "codelists" +EU_VOCABS_DIR = CODELISTS_DIR / "dcat" +INSPIRE_CODELISTS_DIR = CODELISTS_DIR / "inspire" + +# DCAT default elements by profile +metadata_field_names = { + 'eu_dcat_ap': { + 'theme': 'theme_eu', + }, + 'es_dcat': { + 'theme': 'theme_es', + } + , + 'es_dcat_ap': { + 'theme': 'theme_es', + }, +} + +# EU Vocabs +EU_VOCABULARIES = [ + { + "title": "Access Right", + "name": "access-right", + "url": "http://publications.europa.eu/resource/authority/access-right", + "description": "Access rights, CSV fields: URI, Label" + }, + { + "title": "File Types", + "name": "file-types", + "url": "http://op.europa.eu/o/opportal-service/euvoc-download-handler?cellarURI=http://publications.europa.eu/resource/distribution/file-type/rdf/skos_ap_act/filetypes-skos-ap-act.rdf&fileName=filetypes-skos-ap-act.rdf", + "description": "File Types, CSV fields: URI, Label, Non-Proprietary format (true/false)" + }, + { + "title": "IANA Media Types", + "name": "media-types", + "url": "http://www.iana.org/assignments/media-types/media-types.xml", + "description": "File Types, CSV fields: URI, Label" + }, + { + "title": "Licenses", + "name": "licenses", + "url": "http://op.europa.eu/o/opportal-service/euvoc-download-handler?cellarURI=http://publications.europa.eu/resource/distribution/licence/rdf/skos_ap_act/licences-skos-ap-act.rdf&fileName=licences-skos-ap-act.rdf", + "description": "Licenses, CSV fields: URI, Label, EUVocab URI" + } + # Add more URLs and their respective configurations here as needed +] + +# Spanish Profile: Mandatory elements by NTI-RISP. +es_dcat_default_values = { + 'availability': 'http://publications.europa.eu/resource/authority/planned-availability/AVAILABLE', + 'access_rights': 'http://publications.europa.eu/resource/authority/access-right/PUBLIC', + 'conformance_es': 'http://www.boe.es/eli/es/res/2013/02/19/(4)', + 'description': 'Recurso sin descripción.', + 'description_es': 'Recurso sin descripción.', + 'format_es': 'HTML', + 'language_code': 'es', + 'license': 'http://www.opendefinition.org/licenses/cc-by', + 'license_url': 'http://www.opendefinition.org/licenses/cc-by', + 'mimetype_es': 'text/html', + 'notes': 'Conjunto de datos sin descripción.', + 'notes_es': 'Conjunto de datos sin descripción.', + 'notes_en': 'Dataset without description.', + 'publisher_identifier': 'http://datos.gob.es/recurso/sector-publico/org/Organismo/EA0007777', + 'theme_es': 'http://datos.gob.es/kos/sector-publico/sector/sector-publico', + 'theme_eu': 'http://publications.europa.eu/resource/authority/data-theme/GOVE', + 'theme_taxonomy': 'http://datos.gob.es/kos/sector-publico/sector/', + 'spatial_uri': 'http://datos.gob.es/recurso/sector-publico/territorio/Pais/España', +} + +# EU DCAT-AP: Mandatory catalog elements by DCAT-AP. +eu_dcat_ap_default_values = { + 'availability': 'http://publications.europa.eu/resource/authority/planned-availability/AVAILABLE', + 'access_rights': 'http://publications.europa.eu/resource/authority/access-right/PUBLIC', + 'author_role': 'http://id.loc.gov/vocabulary/relators/aut', + 'conformance': 'http://data.europa.eu/930/', + 'contact_role': 'http://id.loc.gov/vocabulary/relators/mdc', + 'description': 'Resource without description.', + 'description_en': 'Resource without description.', + 'description_es': 'Recurso sin descripción.', + 'license': 'http://www.opendefinition.org/licenses/cc-by', + 'license_url': 'http://www.opendefinition.org/licenses/cc-by', + 'maintainer_role': 'http://id.loc.gov/vocabulary/relators/rpy', + 'notes': 'Dataset without description.', + 'notes_es': 'Conjunto de datos sin descripción.', + 'notes_en': 'Dataset without description.', + 'publisher_identifier': 'http://datos.gob.es/recurso/sector-publico/org/Organismo/EA0007777', + 'publisher_role': 'http://id.loc.gov/vocabulary/relators/pbl', + 'reference_system_type': 'http://inspire.ec.europa.eu/glossary/SpatialReferenceSystem', + 'theme_es': 'http://datos.gob.es/kos/sector-publico/sector/sector-publico', + 'theme_eu': 'http://publications.europa.eu/resource/authority/data-theme/GOVE', + 'theme_taxonomy': 'http://publications.europa.eu/resource/authority/data-theme', + 'spatial_uri': 'http://publications.europa.eu/resource/authority/country/ESP', +} + +# EU GeoDCAT-AP Profile: Mandatory catalog elements by GeoDCAT-AP. +eu_geodcat_ap_default_values = { + 'availability': 'http://publications.europa.eu/resource/authority/planned-availability/AVAILABLE', + 'access_rights': 'http://publications.europa.eu/resource/authority/access-right/PUBLIC', + 'author_role': 'http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/author', + 'conformance': 'http://data.europa.eu/930/', + 'contact_role': 'http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/pointOfContact', + 'description': 'Resource without description.', + 'description_en': 'Resource without description.', + 'description_es': 'Recurso sin descripción.', + 'license': 'http://www.opendefinition.org/licenses/cc-by', + 'license_url': 'http://www.opendefinition.org/licenses/cc-by', + 'maintainer_role': 'http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/custodian', + 'notes': 'Dataset without description.', + 'notes_es': 'Conjunto de datos sin descripción.', + 'notes_en': 'Dataset without description.', + 'publisher_identifier': 'http://datos.gob.es/recurso/sector-publico/org/Organismo/EA0007777', + 'publisher_role': 'http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/distributor', + 'reference_system_type': 'http://inspire.ec.europa.eu/glossary/SpatialReferenceSystem', + 'theme_es': 'http://datos.gob.es/kos/sector-publico/sector/sector-publico', + 'theme_eu': 'http://publications.europa.eu/resource/authority/data-theme/GOVE', + 'theme_taxonomy': 'http://publications.europa.eu/resource/authority/data-theme', + 'spatial_uri': 'http://publications.europa.eu/resource/authority/country/ESP', +} + +# Default field_names to translated fields mapping (ckanext.schemingdcat:schemas) +default_translated_fields = { + 'title': + { + 'field_name': 'title_translated', + 'rdf_predicate': DCT.title, + 'fallbacks': ['title'], + '_type': Literal, + '_class': None, + 'required_lang': None + }, + 'notes': + { + 'field_name': 'notes_translated', + 'rdf_predicate': DCT.description, + 'fallbacks': ['notes'], + '_type': Literal, + '_class': None, + 'required_lang': None + }, + 'description': + { + 'field_name': 'description_translated', + 'rdf_predicate': DCT.description, + 'fallbacks': ['description'], + '_type': Literal, + '_class': None, + 'required_lang': None + }, + 'provenance': + { + 'field_name': 'provenance', + 'rdf_predicate': RDFS.label, + 'fallbacks': None, + '_type': Literal, + '_class': DCT.ProvenanceStatement, + 'required_lang': None + }, + 'version_notes': + { + 'field_name': 'version_notes', + 'rdf_predicate': ADMS.versionNotes, + 'fallbacks': None, + '_type': Literal, + '_class': None, + 'required_lang': None + }, +} + +default_translated_fields_es_dcat = { + 'title': + { + 'field_name': 'title_translated', + 'rdf_predicate': DCT.title, + 'fallbacks': ['title'], + '_type': Literal, + '_class': None, + 'required_lang': 'es', + }, + 'notes': + { + 'field_name': 'notes_translated', + 'rdf_predicate': DCT.description, + 'fallbacks': ['notes'], + '_type': Literal, + '_class': None, + 'required_lang': 'es', + }, + 'description': + { + 'field_name': 'description_translated', + 'rdf_predicate': DCT.description, + 'fallbacks': ['description'], + '_type': Literal, + '_class': None, + 'required_lang': 'es', + } +} + +headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' +} + +# Licenses fallbacks +dcat_ap_default_licenses = { + 'http://www.opendefinition.org/licenses/cc-by': { + 'license_url': 'http://www.opendefinition.org/licenses/cc-by', + 'license_id': 'cc-by', + 'fallback_license_url': 'http://publications.europa.eu/resource/authority/licence/CC_BY', + 'fallback_license_id': 'CC_BY' + } +} \ No newline at end of file diff --git a/ckanext/schemingdcat/profiles/eu_dcat_ap_base.py b/ckanext/schemingdcat/profiles/eu_dcat_ap_base.py new file mode 100644 index 0000000..7829e5d --- /dev/null +++ b/ckanext/schemingdcat/profiles/eu_dcat_ap_base.py @@ -0,0 +1,867 @@ +import json +import re +import logging +from decimal import Decimal, DecimalException + +from rdflib import term, URIRef, BNode, Literal +import ckantoolkit as toolkit + +from ckan.lib.munge import munge_tag + +from ckanext.dcat.utils import ( + resource_uri, + DCAT_EXPOSE_SUBCATALOGS, + DCAT_CLEAN_TAGS, + publisher_uri_organization_fallback, +) + +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + SchemingDCATRDFProfile, + # Codelists + MD_INSPIRE_REGISTER, + MD_FORMAT, + MD_EU_LANGUAGES, + # Namespaces + namespaces +) +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + XSD, + SKOS, + SCHEMA, + RDFS, + DCAT, + DCATAP, + DCT, + ADMS, + VCARD, + FOAF, + LOCN, + GSP, + OWL, + SPDX, + GEOJSON_IMT, + CNT, + ELI, + EUROVOC, + # Default values + metadata_field_names, + default_translated_fields, + eu_dcat_ap_default_values, + dcat_ap_default_licenses, + ) + + +config = toolkit.config + +DISTRIBUTION_LICENSE_FALLBACK_CONFIG = "ckanext.dcat.resource.inherit.license" + +log = logging.getLogger(__name__) + +class BaseEuDCATAPProfile(SchemingDCATRDFProfile): + """ + A base profile with common RDF properties across the different DCAT-AP versions + + """ + + # Cache for mappings of licenses URL/title to ID built when needed in + # _license(). + _translated_field_names = None + + def _parse_dataset_base(self, dataset_dict, dataset_ref): + + dataset_dict["extras"] = [] + dataset_dict["resources"] = [] + + # Translated fields + for key, field in default_translated_fields.items(): + predicate = field['rdf_predicate'] + value = self._object_value(dataset_ref, predicate, True) + if value: + dataset_dict[field['field_name']] = value + + # Basic fields + for key, predicate in ( + ("title", DCT.title), + ("notes", DCT.description), + ("url", DCAT.landingPage), + ("version", OWL.versionInfo), + ('encoding', CNT.characterEncoding), + ): + value = self._object_value(dataset_ref, predicate) + if value: + dataset_dict[key] = value + + if not dataset_dict.get("version"): + # adms:version was supported on the first version of the DCAT-AP + value = self._object_value(dataset_ref, ADMS.version) + if value: + dataset_dict["version"] = value + + # Tags + # replace munge_tag to noop if there's no need to clean tags + do_clean = toolkit.asbool(config.get(DCAT_CLEAN_TAGS, False)) + tags_val = [ + munge_tag(tag) if do_clean else tag for tag in self._keywords(dataset_ref) + ] + tags = [{"name": tag} for tag in tags_val] + dataset_dict["tags"] = tags + + # Extras + + # Simple values + for key, predicate in ( + ("issued", DCT.issued), + ("modified", DCT.modified), + ("identifier", DCT.identifier), + ("version_notes", ADMS.versionNotes), + ("frequency", DCT.accrualPeriodicity), + ("provenance", DCT.provenance), + ("dcat_type", DCT.type), + ): + value = self._object_value(dataset_ref, predicate) + if value: + dataset_dict["extras"].append({"key": key, "value": value}) + + # Lists + for key, predicate, in ( + ("language", DCT.language), + ("theme", DCAT.theme), + ("alternate_identifier", ADMS.identifier), + ("conforms_to", DCT.conformsTo), + ("documentation", FOAF.page), + ("related_resource", DCT.relation), + ("has_version", DCT.hasVersion), + ("is_version_of", DCT.isVersionOf), + ("source", DCT.source), + ("sample", ADMS.sample), + ): + values = self._object_value_list(dataset_ref, predicate) + if values: + dataset_dict["extras"].append({"key": key, "value": json.dumps(values)}) + + # Contact details + contact = self._contact_details(dataset_ref, DCAT.contactPoint) + if not contact: + # adms:contactPoint was supported on the first version of DCAT-AP + contact = self._contact_details(dataset_ref, ADMS.contactPoint) + + if contact: + for key in ("uri", "name", "email", "url", "role"): + if contact.get(key): + dataset_dict["extras"].append( + {"key": "contact_{0}".format(key), "value": contact.get(key)} + ) + + # Publisher + publisher = self._publisher(dataset_ref, DCT.publisher) + for key in ("uri", "name", "email", "url", "type", "identifier", "role"): + if publisher.get(key): + dataset_dict["extras"].append( + {"key": "publisher_{0}".format(key), "value": publisher.get(key)} + ) + + # Author + author = self._author(dataset_ref, DCT.creator) + for key in ("uri", "name", "email", "url", "role"): + if author.get(key): + dataset_dict["extras"].append( + {"key": "author_{0}".format(key), "value": author.get(key)} + ) + + # Temporal + start, end = self._time_interval(dataset_ref, DCT.temporal) + if start: + dataset_dict["extras"].append({"key": "temporal_start", "value": start}) + if end: + dataset_dict["extras"].append({"key": "temporal_end", "value": end}) + + # Spatial + spatial = self._spatial(dataset_ref, DCT.spatial) + for key in ("uri", "text", "geom"): + self._add_spatial_to_dict(dataset_dict, key, spatial) + + # Dataset URI (explicitly show the missing ones) + dataset_uri = str(dataset_ref) if isinstance(dataset_ref, term.URIRef) else "" + dataset_dict["extras"].append({"key": "uri", "value": dataset_uri}) + + # access_rights + access_rights = self._access_rights(dataset_ref, DCT.accessRights) + if access_rights: + dataset_dict["extras"].append( + {"key": "access_rights", "value": access_rights} + ) + + # License + if "license_id" not in dataset_dict: + dataset_dict["license_id"] = self._license(dataset_ref) + + # Source Catalog + if toolkit.asbool(config.get(DCAT_EXPOSE_SUBCATALOGS, False)): + catalog_src = self._get_source_catalog(dataset_ref) + if catalog_src is not None: + src_data = self._extract_catalog_dict(catalog_src) + dataset_dict["extras"].extend(src_data) + + # Resources + for distribution in self._distributions(dataset_ref): + + resource_dict = {} + + # Simple values + for key, predicate in ( + ("name", DCT.title), + ("description", DCT.description), + ("access_url", DCAT.accessURL), + ("download_url", DCAT.downloadURL), + ("issued", DCT.issued), + ("modified", DCT.modified), + ("status", ADMS.status), + ("license", DCT.license), + ): + value = self._object_value(distribution, predicate) + if value: + resource_dict[key] = value + + resource_dict["url"] = self._object_value( + distribution, DCAT.downloadURL + ) or self._object_value(distribution, DCAT.accessURL) + # Lists + for key, predicate in ( + ("language", DCT.language), + ("documentation", FOAF.page), + ("conforms_to", DCT.conformsTo), + ("metadata_profile", DCT.conformsTo), + ): + values = self._object_value_list(distribution, predicate) + if values: + resource_dict[key] = json.dumps(values) + + # rights + rights = self._access_rights(distribution, DCT.rights) + if rights: + resource_dict["rights"] = rights + + # Format and media type + normalize_ckan_format = toolkit.asbool( + config.get("ckanext.dcat.normalize_ckan_format", True) + ) + imt, label = self._distribution_format(distribution, normalize_ckan_format) + + if imt: + resource_dict["mimetype"] = imt + + if label: + resource_dict["format"] = label + elif imt: + resource_dict["format"] = imt + + # Size + size = self._object_value_int(distribution, DCAT.byteSize) + if size is not None: + resource_dict["size"] = size + + # Checksum + for checksum in self.g.objects(distribution, SPDX.checksum): + algorithm = self._object_value(checksum, SPDX.algorithm) + checksum_value = self._object_value(checksum, SPDX.checksumValue) + if algorithm: + resource_dict["hash_algorithm"] = algorithm + if checksum_value: + resource_dict["hash"] = checksum_value + + # Distribution URI (explicitly show the missing ones) + resource_dict["uri"] = ( + str(distribution) if isinstance(distribution, term.URIRef) else "" + ) + + # Remember the (internal) distribution reference for referencing in + # further profiles, e.g. for adding more properties + resource_dict["distribution_ref"] = str(distribution) + + dataset_dict["resources"].append(resource_dict) + + if self.compatibility_mode: + # Tweak the resulting dict to make it compatible with previous + # versions of the ckanext-dcat parsers + for extra in dataset_dict["extras"]: + if extra["key"] in ( + "issued", + "modified", + "publisher_name", + "publisher_email", + ): + + extra["key"] = "dcat_" + extra["key"] + + if extra["key"] == "language": + extra["value"] = ",".join(sorted(json.loads(extra["value"]))) + + return dataset_dict + + def _graph_from_dataset_base(self, dataset_dict, dataset_ref): + + g = self.g + + for prefix, namespace in namespaces.items(): + g.bind(prefix, namespace) + + g.add((dataset_ref, RDF.type, DCAT.Dataset)) + + # Translated fields + translated_items = [ + ( + default_translated_fields[key]['field_name'], + default_translated_fields[key]['rdf_predicate'], + default_translated_fields[key]['fallbacks'], + default_translated_fields[key]['_type'], + default_translated_fields[key]['_class'], + default_translated_fields[key]['required_lang'] + ) + for key in default_translated_fields + ] + + self._add_triples_from_dict( + _dict=dataset_dict, + subject=dataset_ref, + items=translated_items, + list_value=False, + date_value=False, + multilang=True + ) + + # Create a set of the translated field names + self._translated_field_names = {item[0] for item in translated_items} + + # Basic fields without translating fields + basic_items = [ + ("title", DCT.title, None, Literal), + ("notes", DCT.description, None, Literal), + ("url", DCAT.landingPage, None, URIRef, FOAF.Document), + ("identifier", DCT.identifier, ["guid", "id"], URIRefOrLiteral), + ("version", OWL.versionInfo, ["dcat_version"], Literal), + ("version_notes", ADMS.versionNotes, None, Literal), + ("frequency", DCT.accrualPeriodicity, None, URIRefOrLiteral, DCT.Frequency), + ("access_rights", DCT.accessRights, None, URIRefOrLiteral, DCT.AccessRights), + ("dcat_type", DCT.type, None, URIRefOrLiteral), + ("provenance", DCT.provenance, None, URIRefOrLiteral, DCT.ProvenanceStatement), + ] + + # Filter basic fields to exclude those already in the translated fields + filtered_basic_items = [item for item in basic_items if item[0] not in self._translated_field_names] + + self._add_triples_from_dict(dataset_dict, dataset_ref, filtered_basic_items) + + # Access Rights + # DCAT-AP: http://publications.europa.eu/en/web/eu-vocabularies/at-dataset/-/resource/dataset/access-right + access_rights_value = self._get_dataset_value(dataset_dict, "access_rights") + + if access_rights_value: + if "authority/access-right" in access_rights_value: + g.add((dataset_ref, DCT.accessRights, URIRef(access_rights_value))) + else: + g.remove((dataset_ref, DCT.accessRights, URIRef(access_rights_value))) + g.add((dataset_ref, DCT.accessRights, URIRef(eu_dcat_ap_default_values["access_rights"]))) + else: + g.add((dataset_ref, DCT.accessRights, URIRef(eu_dcat_ap_default_values["access_rights"]))) + + # Tags + # Pre-process keywords inside INSPIRE MD Codelists and update dataset_dict + dataset_tag_base = f'{dataset_ref.split("/dataset/")[0]}' + tag_names = [tag["name"].replace(" ", "").lower() for tag in dataset_dict.get("tags", [])] + + # Search for matching keywords in MD_INSPIRE_REGISTER and update dataset_dict + if tag_names: + self._search_values_codelist_add_to_graph(MD_INSPIRE_REGISTER, tag_names, dataset_dict, dataset_ref, dataset_tag_base, g, DCAT.keyword) + + # Dates + items = [ + ("issued", DCT.issued, ["metadata_created"], Literal), + ("modified", DCT.modified, ["metadata_modified"], Literal), + ] + self._add_date_triples_from_dict(dataset_dict, dataset_ref, items) + + # Lists + items = [ + ("language", DCT.language, None, URIRefOrLiteral, DCT.LinguisticSystem), + ("theme", DCAT.theme, None, URIRef), + ("conforms_to", DCT.conformsTo, None, URIRefOrLiteral, DCT.Standard), + ("alternate_identifier", ADMS.identifier, None, URIRefOrLiteral, ADMS.Identifier), + ("documentation", FOAF.page, None, URIRefOrLiteral, FOAF.Document), + ("related_resource", DCT.relation, None, URIRefOrLiteral, RDFS.Resource), + ("has_version", DCT.hasVersion, None, URIRefOrLiteral), + ("is_version_of", DCT.isVersionOf, None, URIRefOrLiteral), + ("source", DCT.source, None, URIRefOrLiteral), + ("sample", ADMS.sample, None, URIRefOrLiteral, DCAT.Distribution), + ] + self._add_list_triples_from_dict(dataset_dict, dataset_ref, items) + + # DCAT Themes (https://publications.europa.eu/resource/authority/data-theme) + # Append the final result to the graph + dcat_themes = self._themes(dataset_ref) + for theme in dcat_themes: + g.add((dataset_ref, DCAT.theme, URIRefOrLiteral(theme))) + + # Contact details + if any([ + self._get_dataset_value(dataset_dict, "contact_uri"), + self._get_dataset_value(dataset_dict, "contact_name"), + self._get_dataset_value(dataset_dict, "contact_email"), + self._get_dataset_value(dataset_dict, "contact_url"), + ]): + + contact_uri = self._get_dataset_value(dataset_dict, "contact_uri") + if contact_uri: + contact_details = CleanedURIRef(contact_uri) + else: + contact_details = BNode() + + g.add((contact_details, RDF.type, VCARD.Kind)) + g.add((dataset_ref, DCAT.contactPoint, contact_details)) + + # Add name + self._add_triple_from_dict( + dataset_dict, contact_details, + VCARD.fn, "contact_name" + ) + # Add mail address as URIRef, and ensure it has a mailto: prefix + self._add_triple_from_dict( + dataset_dict, contact_details, + VCARD.hasEmail, + "contact_email", + _type=URIRef, + value_modifier=self._add_mailto, + ) + # Add contact URL + self._add_triple_from_dict( + dataset_dict, contact_details, + VCARD.hasURL, "contact_url", + _type=URIRef) + + # Add contact role + g.add((contact_details, VCARD.role, URIRef(eu_dcat_ap_default_values["contact_role"]))) + + # Resource maintainer/contact + if any([ + self._get_dataset_value(dataset_dict, "maintainer"), + self._get_dataset_value(dataset_dict, "maintainer_uri"), + self._get_dataset_value(dataset_dict, "maintainer_email"), + self._get_dataset_value(dataset_dict, "maintainer_url"), + ]): + maintainer_uri = self._get_dataset_value(dataset_dict, "maintainer_uri") + if maintainer_uri: + maintainer_details = CleanedURIRef(maintainer_uri) + else: + maintainer_details = dataset_ref + "/maintainer" + + g.add((maintainer_details, RDF.type, VCARD.Kind)) + g.add((dataset_ref, DCAT.contactPoint, maintainer_details)) + + ## Add name & mail + self._add_triple_from_dict( + dataset_dict, maintainer_details, + VCARD.fn, "maintainer" + ) + # Add mail address as URIRef, and ensure it has a mailto: prefix + self._add_triple_from_dict( + dataset_dict, maintainer_details, + VCARD.hasEmail, + "maintainer_email", + _type=URIRef, + value_modifier=self._add_mailto, + ) + # Add maintainer URL + self._add_triple_from_dict( + dataset_dict, maintainer_details, + VCARD.hasURL, "maintainer_url", + _type=URIRef) + + # Add maintainer role + g.add((maintainer_details, VCARD.role, URIRef(eu_dcat_ap_default_values["maintainer_role"]))) + + # Resource author + if any([ + self._get_dataset_value(dataset_dict, "author"), + self._get_dataset_value(dataset_dict, "author_uri"), + self._get_dataset_value(dataset_dict, "author_email"), + self._get_dataset_value(dataset_dict, "author_url"), + ]): + author_uri = self._get_dataset_value(dataset_dict, "author_uri") + if author_uri: + author_details = CleanedURIRef(author_uri) + else: + author_details = dataset_ref + "/author" + + g.add((author_details, RDF.type, VCARD.Organization)) + g.add((dataset_ref, DCT.creator, author_details)) + + ## Add name & mail + self._add_triple_from_dict( + dataset_dict, author_details, + VCARD.fn, "author" + ) + # Add mail address as URIRef, and ensure it has a mailto: prefix + self._add_triple_from_dict( + dataset_dict, author_details, + VCARD.hasEmail, + "author_email", + _type=URIRef, + value_modifier=self._add_mailto, + ) + # Add author URL + self._add_triple_from_dict( + dataset_dict, author_details, + VCARD.hasURL, "author_url", + _type=URIRef) + + # Add author role + g.add((author_details, VCARD.role, URIRef(eu_dcat_ap_default_values["author_role"]))) + + # Provenance: dataset dct:provenance dct:ProvenanceStatement + provenance_details = dataset_ref + "/provenance" + provenance_statement = self._get_dataset_value(dataset_dict, "provenance") + if provenance_statement: + g.add((dataset_ref, DCT.provenance, provenance_details)) + g.add((provenance_details, RDF.type, DCT.ProvenanceStatement)) + + if isinstance(provenance_statement, dict): + self._add_multilang_triple(provenance_details, RDFS.label, provenance_statement) + else: + g.add((provenance_details, RDFS.label, Literal(provenance_statement))) + + # Publisher + publisher_ref = None + + if dataset_dict.get("publisher"): + # Scheming publisher field: will be handled in a separate profile + pass + elif any( + [ + self._get_dataset_value(dataset_dict, "publisher_uri"), + self._get_dataset_value(dataset_dict, "publisher_name"), + ] + ): + # Legacy publisher_* extras + publisher_uri = self._get_dataset_value(dataset_dict, "publisher_uri") + publisher_name = self._get_dataset_value(dataset_dict, "publisher_name") + if publisher_uri: + publisher_ref = CleanedURIRef(publisher_uri) + else: + # No publisher_uri + publisher_ref = BNode() + publisher_details = { + "name": publisher_name, + "email": self._get_dataset_value(dataset_dict, "publisher_email"), + "url": self._get_dataset_value(dataset_dict, "publisher_url"), + "type": self._get_dataset_value(dataset_dict, "publisher_type"), + "identifier": self._get_dataset_value(dataset_dict, "publisher_identifier"), + "uri": publisher_uri, + } + elif dataset_dict.get("organization"): + # Fall back to dataset org + org_id = dataset_dict["organization"]["id"] + org_dict = None + if org_id in self._org_cache: + org_dict = self._org_cache[org_id] + else: + try: + org_dict = toolkit.get_action("organization_show")( + {"ignore_auth": True}, {"id": org_id} + ) + self._org_cache[org_id] = org_dict + except toolkit.ObjectNotFound: + pass + if org_dict: + publisher_ref = CleanedURIRef( + publisher_uri_organization_fallback(dataset_dict) + ) + publisher_details = { + "name": org_dict.get("title"), + "email": org_dict.get("publisher_email") or org_dict.get("email"), + "url": org_dict.get("url"), + "type": org_dict.get("publisher_type") or org_dict.get("dcat_type"), + "identifier": org_dict.get("identifier"), + } + # Add to graph + if publisher_ref: + g.add((publisher_ref, RDF.type, FOAF.Agent)) + g.add((dataset_ref, DCT.publisher, publisher_ref)) + items = [ + ("name", FOAF.name, None, Literal), + ("email", FOAF.mbox, None, Literal), + ("url", FOAF.homepage, None, URIRef), + ("type", DCT.type, None, URIRefOrLiteral), + ] + + # Add publisher role + g.add((publisher_details, VCARD.role, URIRef(eu_dcat_ap_default_values["publisher_role"]))) + + self._add_triples_from_dict(publisher_details, publisher_ref, items) + + # TODO: Deprecated: https://semiceu.github.io/GeoDCAT-AP/drafts/latest/#deprecated-properties-for-period-of-time + # Temporal + start = self._get_dataset_value(dataset_dict, "temporal_start") + end = self._get_dataset_value(dataset_dict, "temporal_end") + if start or end: + temporal_extent = BNode() + + g.add((temporal_extent, RDF.type, DCT.PeriodOfTime)) + if start: + self._add_date_triple(temporal_extent, SCHEMA.startDate, start) + if end: + self._add_date_triple(temporal_extent, SCHEMA.endDate, end) + g.add((dataset_ref, DCT.temporal, temporal_extent)) + + # Spatial + spatial_text = self._get_dataset_value(dataset_dict, "spatial_text") + spatial_geom = self._get_dataset_value(dataset_dict, "spatial") + + if spatial_text or spatial_geom: + spatial_ref = self._get_or_create_spatial_ref(dataset_dict, dataset_ref) + + if spatial_text: + g.add((spatial_ref, SKOS.prefLabel, Literal(spatial_text))) + + if spatial_geom: + self._add_spatial_value_to_graph( + spatial_ref, LOCN.geometry, spatial_geom + ) + + # Coordinate Reference System + if self._get_dataset_value(dataset_dict, "reference_system"): + crs_uri = self._get_dataset_value(dataset_dict, "reference_system") + crs_details = CleanedURIRef(crs_uri) + g.add((crs_details, RDF.type, DCT.Standard)) + g.add((crs_details, DCT.type, CleanedURIRef(eu_dcat_ap_default_values["reference_system_type"]))) + g.add((dataset_ref, DCT.conformsTo, crs_details)) + + # Update licenses if it is in dcat_ap_default_licenses. DCAT-AP Compliance + if "license_url" in dataset_dict: + license_info = dcat_ap_default_licenses.get(dataset_dict["license_url"], None) + if license_info: + dataset_dict["license_id"] = license_info["fallback_license_id"] + dataset_dict["license_url"] = license_info["fallback_license_url"] + + # Use fallback license if set in config + resource_license_fallback = None + if toolkit.asbool(config.get(DISTRIBUTION_LICENSE_FALLBACK_CONFIG, False)): + if "license_id" in dataset_dict and isinstance( + URIRefOrLiteral(dataset_dict["license_id"]), URIRef + ): + resource_license_fallback = dataset_dict["license_id"] + elif "license_url" in dataset_dict and isinstance( + URIRefOrLiteral(dataset_dict["license_url"]), URIRef + ): + resource_license_fallback = dataset_dict["license_url"] + + # Resources + for resource_dict in dataset_dict.get("resources", []): + + distribution = CleanedURIRef(resource_uri(resource_dict)) + + g.add((dataset_ref, DCAT.distribution, distribution)) + + g.add((distribution, RDF.type, DCAT.Distribution)) + + # Simple values + items = [ + ("name", DCT.title, None, Literal), + ("description", DCT.description, None, Literal), + ("status", ADMS.status, None, URIRefOrLiteral), + ("rights", DCT.rights, None, URIRefOrLiteral, DCT.RightsStatement), + ("license", DCT.license, None, URIRefOrLiteral, DCT.LicenseDocument), + ("access_url", DCAT.accessURL, None, URIRef, RDFS.Resource), + ("download_url", DCAT.downloadURL, None, URIRef, RDFS.Resource), + ("encoding", CNT.characterEncoding, None, Literal), + ] + + self._add_triples_from_dict(resource_dict, distribution, items) + + # Lists + items = [ + ("documentation", FOAF.page, None, URIRefOrLiteral, FOAF.Document), + ("language", DCT.language, None, URIRefOrLiteral, DCT.LinguisticSystem), + ("conforms_to", DCT.conformsTo, None, URIRefOrLiteral, DCT.Standard), + ("metadata_profile", DCT.conformsTo, None, URIRef), + ] + self._add_list_triples_from_dict(resource_dict, distribution, items) + + # Set default license for distribution if needed and available + + if resource_license_fallback and not (distribution, DCT.license, None) in g: + g.add( + ( + distribution, + DCT.license, + URIRefOrLiteral(resource_license_fallback), + ) + ) + # TODO: add an actual field to manage this + if (distribution, DCT.license, None) in g: + g.add( + ( + list(g.objects(distribution, DCT.license))[0], + DCT.type, + URIRef("http://purl.org/adms/licencetype/UnknownIPR") + ) + ) + + # Format + mimetype = resource_dict.get("mimetype") + fmt = resource_dict.get("format") + + # IANA media types (either URI or Literal) should be mapped as mediaType. + # In case format is available and mimetype is not set or identical to format, + # check which type is appropriate. + if fmt and (not mimetype or mimetype == fmt): + if ( + "iana.org/assignments/media-types" in fmt + or not fmt.startswith("http") + and "/" in fmt + ): + # output format value as dcat:mediaType instead of dct:format + mimetype = fmt + fmt = None + else: + # Use dct:format + mimetype = None + + if mimetype: + mimetype = URIRefOrLiteral(mimetype) + g.add((distribution, DCAT.mediaType, mimetype)) + if isinstance(mimetype, URIRef): + g.add((mimetype, RDF.type, DCT.MediaType)) + elif fmt: + mime_val = self._search_value_codelist(MD_FORMAT, fmt, "id", "media_type") or None + if mime_val and mime_val != fmt: + g.add((distribution, DCAT.mediaType, URIRefOrLiteral(mime_val))) + + # Try to match format field + fmt = self._search_value_codelist(MD_FORMAT, fmt, "label", "id") or fmt + + # Add format to graph + if fmt: + fmt = URIRefOrLiteral(fmt) + g.add((distribution, DCT["format"], fmt)) + if isinstance(fmt, URIRef): + g.add((fmt, RDF.type, DCT.MediaTypeOrExtent)) + + # URL fallback and old behavior + url = resource_dict.get("url") + download_url = resource_dict.get("download_url") + access_url = resource_dict.get("access_url") + # Use url as fallback for access_url if access_url is not set and download_url is not equal + if url and not access_url: + if (not download_url) or (download_url and url != download_url): + self._add_triple_from_dict( + resource_dict, distribution, DCAT.accessURL, "url", _type=URIRef + ) + + # Dates + items = [ + ("issued", DCT.issued, ["created"], Literal), + ("modified", DCT.modified, ["metadata_modified"], Literal), + ] + + self._add_date_triples_from_dict(resource_dict, distribution, items) + + # Access Rights + # DCAT-AP: http://publications.europa.eu/en/web/eu-vocabularies/at-dataset/-/resource/dataset/access-right + rights_value = self._get_resource_value(resource_dict, 'rights') + if rights_value and 'authority/access-right' in rights_value: + rights_uri = URIRef(rights_value) + else: + rights_uri = URIRef(eu_dcat_ap_default_values['access_rights']) + + if rights_value: + g.remove((distribution, DCT.rights, URIRef(rights_value))) + g.add((distribution, DCT.rights, rights_uri)) + + # Numbers + if resource_dict.get("size"): + try: + g.add( + ( + distribution, + DCAT.byteSize, + Literal(Decimal(resource_dict["size"]), datatype=XSD.decimal), + ) + ) + except (ValueError, TypeError, DecimalException): + g.add((distribution, DCAT.byteSize, Literal(resource_dict["size"]))) + # Checksum + if resource_dict.get("hash"): + checksum = BNode() + g.add((checksum, RDF.type, SPDX.Checksum)) + g.add( + ( + checksum, + SPDX.checksumValue, + Literal(resource_dict["hash"], datatype=XSD.hexBinary), + ) + ) + + if resource_dict.get("hash_algorithm"): + checksum_algo = URIRefOrLiteral(resource_dict["hash_algorithm"]) + g.add( + ( + checksum, + SPDX.algorithm, + checksum_algo, + ) + ) + if isinstance(checksum_algo, URIRef): + g.add((checksum_algo, RDF.type, SPDX.ChecksumAlgorithm)) + + g.add((distribution, SPDX.checksum, checksum)) + + def _graph_from_catalog_base(self, catalog_dict, catalog_ref): + + g = self.g + + for prefix, namespace in namespaces.items(): + g.bind(prefix, namespace) + + g.add((catalog_ref, RDF.type, DCAT.Catalog)) + + # Basic fields + license, publisher_identifier, access_rights, spatial_uri, language = [ + self._get_catalog_field(field_name='license_url'), + self._get_catalog_field(field_name='publisher_identifier', fallback='publisher_uri'), + self._get_catalog_field(field_name='access_rights'), + self._get_catalog_field(field_name='spatial_uri'), + self._search_value_codelist(MD_EU_LANGUAGES, config.get('ckan.locale_default'), "label","id") or eu_dcat_ap_default_values['language'], + ] + + # Mandatory elements by NTI-RISP (datos.gob.es) + items = [ + ("identifier", DCT.identifier, f'{config.get("ckan_url")}/catalog.rdf', Literal), + ("title", DCT.title, config.get("ckan.site_title"), Literal), + ("encoding", CNT.characterEncoding, "UTF-8", Literal), + ("description", DCT.description, config.get("ckan.site_description"), Literal), + ("publisher_identifier", DCT.publisher, publisher_identifier, URIRef), + ("language", DCT.language, language, URIRefOrLiteral), + ("spatial_uri", DCT.spatial, spatial_uri, URIRefOrLiteral), + ("theme_taxonomy", DCAT.themeTaxonomy, eu_dcat_ap_default_values["theme_taxonomy"], URIRef), + ("homepage", FOAF.homepage, config.get("ckan_url"), URIRef), + ("license", DCT.license, license, URIRef), + ("conforms_to", DCT.conformsTo, eu_dcat_ap_default_values["conformance"], URIRef), + ("access_rights", DCT.accessRights, access_rights, URIRefOrLiteral), + ] + + for item in items: + key, predicate, fallback, _type = item + if catalog_dict: + value = catalog_dict.get(key, fallback) + else: + value = fallback + if value: + g.add((catalog_ref, predicate, _type(value))) + + # Dates + modified = self._last_catalog_modification() + if modified: + self._add_date_triple(catalog_ref, DCT.modified, modified) diff --git a/ckanext/schemingdcat/profiles/eu_dcat_ap_scheming.py b/ckanext/schemingdcat/profiles/eu_dcat_ap_scheming.py new file mode 100644 index 0000000..bfe331d --- /dev/null +++ b/ckanext/schemingdcat/profiles/eu_dcat_ap_scheming.py @@ -0,0 +1,258 @@ +import json + +from rdflib import URIRef, BNode, Literal +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import SchemingDCATRDFProfile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + XSD, + SKOS, + SCHEMA, + RDFS, + DCAT, + DCATAP, + DCT, + ADMS, + VCARD, + FOAF, + LOCN, + ) + + +class EuDCATAPSchemingDCATProfile(SchemingDCATRDFProfile): + """ + Custom ckanext-dcat euro_dcat_ap_scheming profile. https://github.com/ckan/ckanext-dcat/blob/master/ckanext/dcat/profiles/euro_dcat_ap_scheming.py + + Notes: + **EuropeanDCATAPSchemingProfile**: This is a compatibilty profile meant to add support for ckanext-scheming to the + existing `euro_dcat_ap` and `euro_dcat_ap_2` profiles. + It does not add or remove any properties from these profiles, it just transforms the + resulting dataset_dict so it is compatible with a ckanext-scheming schema + """ + + def parse_dataset(self, dataset_dict, dataset_ref): + + return self._parse_dataset_v2_scheming(dataset_dict, dataset_ref) + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + self._graph_from_dataset_v2_scheming(dataset_dict, dataset_ref) + + def _parse_dataset_v2_scheming(self, dataset_dict, dataset_ref): + """ + Modify the dataset_dict generated by the euro_dcat_ap and euro_dcat_ap_2 + profiles to make it compatible with the scheming file definitions: + * Move extras to root level fields + * Parse lists (multiple text preset) + * Turn namespaced extras into repeating subfields + """ + + if not self._dataset_schema: + # Not using scheming + return dataset_dict + + # Move extras to root + + extras_to_remove = [] + extras = dataset_dict.get("extras", []) + for extra in extras: + if self._schema_field(extra["key"]): + # This is a field defined in the dataset schema + dataset_dict[extra["key"]] = extra["value"] + extras_to_remove.append(extra["key"]) + + dataset_dict["extras"] = [e for e in extras if e["key"] not in extras_to_remove] + + # Parse lists + def _parse_list_value(data_dict, field_name): + schema_field = self._schema_field( + field_name + ) or self._schema_resource_field(field_name) + + if schema_field and "scheming_multiple_text" in schema_field.get( + "validators", [] + ): + if isinstance(data_dict[field_name], str): + try: + data_dict[field_name] = json.loads(data_dict[field_name]) + except ValueError: + pass + + for field_name in dataset_dict.keys(): + _parse_list_value(dataset_dict, field_name) + + for resource_dict in dataset_dict.get("resources", []): + for field_name in resource_dict.keys(): + _parse_list_value(resource_dict, field_name) + + # Repeating subfields + new_fields_mapping = {"temporal_coverage": "temporal"} + for schema_field in self._dataset_schema["dataset_fields"]: + if "repeating_subfields" in schema_field: + # Check if existing extras need to be migrated + field_name = schema_field["field_name"] + new_extras = [] + new_dict = {} + check_name = new_fields_mapping.get(field_name, field_name) + for extra in dataset_dict.get("extras", []): + if extra["key"].startswith(f"{check_name}_"): + subfield = extra["key"][extra["key"].index("_") + 1:] + if subfield in [ + f["field_name"] for f in schema_field["repeating_subfields"] + ]: + new_dict[subfield] = extra["value"] + else: + new_extras.append(extra) + else: + new_extras.append(extra) + if new_dict: + dataset_dict[field_name] = [new_dict] + dataset_dict["extras"] = new_extras + + # Repeating subfields: resources + for schema_field in self._dataset_schema["resource_fields"]: + if "repeating_subfields" in schema_field: + # Check if value needs to be load from JSON + field_name = schema_field["field_name"] + for resource_dict in dataset_dict.get("resources", []): + if resource_dict.get(field_name) and isinstance( + resource_dict[field_name], str + ): + try: + # TODO: load only subfields in schema? + resource_dict[field_name] = json.loads( + resource_dict[field_name] + ) + except ValueError: + pass + + return dataset_dict + + def _graph_from_dataset_v2_scheming(self, dataset_dict, dataset_ref): + """ + Add triples to the graph from new repeating subfields + """ + + def _not_empty_dict(data_dict): + return any(data_dict.values()) + + # Contact details + contact = dataset_dict.get("contact") + if isinstance(contact, list) and len(contact) and _not_empty_dict(contact[0]): + for item in contact: + contact_uri = item.get("uri") + if contact_uri: + contact_details = CleanedURIRef(contact_uri) + else: + contact_details = BNode() + + self.g.add((contact_details, RDF.type, VCARD.Kind)) + self.g.add((dataset_ref, DCAT.contactPoint, contact_details)) + + self._add_triple_from_dict(item, contact_details, VCARD.fn, "name") + # Add mail address as URIRef, and ensure it has a mailto: prefix + self._add_triple_from_dict( + item, + contact_details, + VCARD.hasEmail, + "email", + _type=URIRef, + value_modifier=self._add_mailto, + ) + + publisher = dataset_dict.get("publisher") + if ( + isinstance(publisher, list) + and len(publisher) + and _not_empty_dict(publisher[0]) + ): + publisher = publisher[0] + publisher_uri = publisher.get("uri") + if publisher_uri: + publisher_ref = CleanedURIRef(publisher_uri) + else: + publisher_ref = BNode() + + self.g.add((publisher_ref, RDF.type, FOAF.Agent)) + self.g.add((dataset_ref, DCT.publisher, publisher_ref)) + + self._add_triple_from_dict(publisher, publisher_ref, FOAF.name, "name") + self._add_triple_from_dict( + publisher, publisher_ref, FOAF.homepage, "url", _type=URIRef + ) + self._add_triple_from_dict( + publisher, + publisher_ref, + DCT.type, + "type", + _type=URIRefOrLiteral, + # TODO: fix prefLabel stuff + # _class=SKOS.Concept, + ) + self._add_triple_from_dict( + publisher, + publisher_ref, + VCARD.hasEmail, + "email", + _type=URIRef, + value_modifier=self._add_mailto, + ) + + self._add_triple_from_dict( + publisher, + publisher_ref, + DCT.identifier, + "identifier", + _type=URIRefOrLiteral + ) + + temporal = dataset_dict.get("temporal_coverage") + if ( + isinstance(temporal, list) + and len(temporal) + and _not_empty_dict(temporal[0]) + ): + for item in temporal: + temporal_ref = BNode() + self.g.add((temporal_ref, RDF.type, DCT.PeriodOfTime)) + if item.get("start"): + self._add_date_triple(temporal_ref, DCAT.startDate, item["start"]) + if item.get("end"): + self._add_date_triple(temporal_ref, DCAT.endDate, item["end"]) + self.g.add((dataset_ref, DCT.temporal, temporal_ref)) + + spatial = dataset_dict.get("spatial_coverage") + if isinstance(spatial, list) and len(spatial) and _not_empty_dict(spatial[0]): + for item in spatial: + if item.get("uri"): + spatial_ref = CleanedURIRef(item["uri"]) + else: + spatial_ref = BNode() + self.g.add((spatial_ref, RDF.type, DCT.Location)) + self.g.add((dataset_ref, DCT.spatial, spatial_ref)) + + if item.get("text"): + self.g.add((spatial_ref, SKOS.prefLabel, Literal(item["text"]))) + + for field in [ + ("geom", LOCN.Geometry), + ("bbox", DCAT.bbox), + ("centroid", DCAT.centroid), + ]: + if item.get(field[0]): + self._add_spatial_value_to_graph( + spatial_ref, field[1], item[field[0]] + ) + + resources = dataset_dict.get("resources", []) + for resource in resources: + if resource.get("access_services"): + if isinstance(resource["access_services"], str): + try: + resource["access_services"] = json.loads( + resource["access_services"] + ) + except ValueError: + pass diff --git a/ckanext/schemingdcat/profiles/geodcat_ap/__init__.py b/ckanext/schemingdcat/profiles/geodcat_ap/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ckanext/schemingdcat/profiles/geodcat_ap/eu_geodcat_ap_2.py b/ckanext/schemingdcat/profiles/geodcat_ap/eu_geodcat_ap_2.py new file mode 100644 index 0000000..3d3e0db --- /dev/null +++ b/ckanext/schemingdcat/profiles/geodcat_ap/eu_geodcat_ap_2.py @@ -0,0 +1,240 @@ +import json +import logging +from decimal import Decimal, DecimalException + +from rdflib import URIRef, BNode, Literal + +from ckanext.dcat.utils import resource_uri +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + # Codelists + MD_INSPIRE_REGISTER, + MD_FORMAT, + MD_EU_LANGUAGES, +) + +from ckanext.schemingdcat.profiles.dcat_ap.eu_dcat_ap_2 import EuDCATAP2Profile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + DCAT, + DCATAP, + GEODCATAP, + VCARD, + DCT, + XSD, + SCHEMA, + RDFS, + ADMS, + CNT, + ELI, + # Default values + metadata_field_names, + eu_geodcat_ap_default_values, + ) + + +log = logging.getLogger(__name__) + +#TODO: Implement GeoDCAT-AP 2 profile +class EuGeoDCATAP2Profile(EuDCATAP2Profile): + """ + A custom RDF profile based on the GeoDCAT-AP 2 for data portals in Europe + + More information and specification: + + https://joinup.ec.europa.eu/collection/semic-support-centre/solution/geodcat-application-profile-data-portals-europe + + """ + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + dataset_dict = self._parse_dataset_v2(dataset_dict, dataset_ref) + + # GeoDCAT-AP 2 properties + dataset_dict = self._parse_dataset_geodcat_ap_v2(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + self._graph_from_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 specific properties + self._graph_from_dataset_v2_only(dataset_dict, dataset_ref) + + # GeoDCAT-AP 2 properties + self._graph_from_dataset_geodcat_ap_v2(dataset_dict, dataset_ref) + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + # Call base method for common properties + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + # GeoDCAT-AP 2 Catalog properties + self._graph_from_catalog_geodcat_ap_v2(catalog_dict, catalog_ref) + + def _parse_dataset_geodcat_ap_v2(self, dataset_dict, dataset_ref): + + # Call base super method for common properties + super().parse_dataset(dataset_dict, dataset_ref) + + # Lists + for key, predicate, in ( + (metadata_field_names["eu_dcat_ap"]["theme"], DCAT.theme), + (metadata_field_names["es_dcat_ap"]["theme"], DCAT.theme), + ("metadata_profile", DCT.conformsTo), + ("inspire_id", ADMS.identifier), + ("lineage_source", DCT.source), + ("reference", DCAT.relation), + ): + values = self._object_value_list(dataset_ref, predicate) + if values: + dataset_dict["extras"].append({"key": key, "value": json.dumps(values)}) + + # Basic fields + for key, predicate in ( + ("topic", DCAT.keyword, None), + ("representation_type", ADMS.representionTechnique, None), + ): + value = self._object_value(dataset_ref, predicate) + if value: + dataset_dict[key] = value + + # Parse roles + roles = [ + ("contact", [DCAT.contactPoint, ADMS.contactPoint]), + ("author", [DCT.creator]), + ("publisher", [DCT.publisher]) + ] + + for role, predicates in roles: + contact_details = None + for predicate in predicates: + contact_details = self._contact_details(dataset_ref, predicate) + if contact_details: + break + + if contact_details and contact_details.get("role"): + dataset_dict["extras"].append( + {"key": f"{role}_role", "value": contact_details.get("role")} + ) + + # Lists + for key, predicate, in ( + (metadata_field_names["eu_dcat_ap"]["theme"], DCAT.theme), + (metadata_field_names["es_dcat_ap"]["theme"], DCAT.theme), + ('inspire_id', ADMS.identifier), + ('metadata_profile', DCT.conformsTo), + ('lineage_source', DCT.source), + ): + values = self._object_value_list(dataset_ref, predicate) + if values: + dataset_dict["extras"].append({"key": key, "value": json.dumps(values)}) + + return dataset_dict + + def _graph_from_dataset_geodcat_ap_v2(self, dataset_dict, dataset_ref): + """ + CKAN -> DCAT properties carried forward to higher GeoDCAT-AP versions + """ + + + # INSPIRE roles. https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact + + # Contact Point + if any([ + self._get_dataset_value(dataset_dict, "contact_uri"), + self._get_dataset_value(dataset_dict, "contact_role"), + ]): + self._add_role(dataset_dict, "contact_uri", role_key="contact_role") + + # Maintainer + if self._get_dataset_value(dataset_dict, "maintainer_uri"): + self._add_role(dataset_dict, "maintainer_uri", role_value=eu_geodcat_ap_default_values["maintainer_role"]) + + # Publisher + if self._get_dataset_value(dataset_dict, "publisher_uri"): + self._add_role(dataset_dict, "publisher_uri", role_value=eu_geodcat_ap_default_values["publisher_role"]) + + # Author + if self._get_dataset_value(dataset_dict, "author_uri"): + self._add_role(dataset_dict, "author_uri", role_value=eu_geodcat_ap_default_values["author_role"]) + + # Lists + items = [ + (metadata_field_names["eu_dcat_ap"]["theme"], DCAT.theme, None, URIRef), + (metadata_field_names["es_dcat_ap"]["theme"], DCAT.theme, None, URIRef), + ("metadata_profile", DCT.conformsTo, None, URIRef), + ("inspire_id", ADMS.identifier, None, URIRefOrLiteral), + ("lineage_source", DCT.source, None, Literal), + ("reference", DCAT.relation, None, URIRefOrLiteral), + ] + self._add_list_triples_from_dict(dataset_dict, dataset_ref, items) + + # Basic fields without translating fields + basic_items = [ + ("topic", DCAT.keyword, None, URIRefOrLiteral), + ("representation_type", ADMS.representionTechnique, None, URIRefOrLiteral), + ] + + # Filtrar los campos básicos para excluir los que ya están en los campos traducidos + filtered_basic_items = [item for item in basic_items if item[0] not in self._translated_field_names] + + self._add_triples_from_dict(dataset_dict, dataset_ref, filtered_basic_items) + + def _graph_from_catalog_geodcat_ap_v2(self, catalog_dict, catalog_ref): + """ + CKAN -> DCAT Catalog properties carried forward to higher GeoDCAT-AP versions + """ + pass + + def _add_role(self, dataset_dict, uri_key, role_value=None, role_key=None): + """ + Adds a role to a dataset entity in the graph. + + This function handles the addition of roles to dataset entities. It first + retrieves the URI from the dataset dictionary using the provided `uri_key`. + If the URI is found, it creates a `CleanedURIRef` object; otherwise, it + creates a blank node (`BNode`). Depending on whether `role_value` or + `role_key` is provided, it either adds a specific role or a role from the + dataset dictionary. + + Args: + dataset_dict (dict): The dataset dictionary containing metadata. + uri_key (str): The key to retrieve the URI from the dataset dictionary. + role_value (str, optional): The specific role URI to be added. Defaults to None. + role_key (str, optional): The key to retrieve the role from the dataset dictionary. Defaults to None. + + Returns: + None + """ + uri = self._get_dataset_value(dataset_dict, uri_key) + if uri: + details = CleanedURIRef(uri) + else: + details = BNode() + + if role_value: + # Remove existing role if any + existing_roles = list(self.g.objects(details, VCARD.role)) + for role in existing_roles: + self.g.remove((details, VCARD.role, role)) + + # Add new role + self.g.add((details, VCARD.role, URIRef(role_value))) + elif role_key: + # Add role from dataset_dict + self._add_triple_from_dict( + dataset_dict, details, + VCARD.role, role_key, + _type=URIRef) diff --git a/ckanext/schemingdcat/profiles/geodcat_ap/eu_geodcat_ap_3.py b/ckanext/schemingdcat/profiles/geodcat_ap/eu_geodcat_ap_3.py new file mode 100644 index 0000000..09e4c08 --- /dev/null +++ b/ckanext/schemingdcat/profiles/geodcat_ap/eu_geodcat_ap_3.py @@ -0,0 +1,96 @@ +import json +from decimal import Decimal, DecimalException + +from rdflib import URIRef, BNode, Literal + +from ckanext.dcat.utils import resource_uri +from ckanext.dcat.profiles.base import URIRefOrLiteral, CleanedURIRef + +from ckanext.schemingdcat.profiles.base import ( + # Codelists + MD_INSPIRE_REGISTER, + MD_FORMAT, + MD_EU_LANGUAGES, +) + +from ckanext.schemingdcat.profiles.dcat_ap.eu_dcat_ap_3 import EuDCATAP3Profile +from ckanext.schemingdcat.profiles.geodcat_ap.eu_geodcat_ap_2 import EuGeoDCATAP2Profile +from ckanext.schemingdcat.profiles.eu_dcat_ap_scheming import EuDCATAPSchemingDCATProfile +from ckanext.schemingdcat.profiles.dcat_config import ( + # Vocabs + RDF, + DCAT, + DCATAP, + GEODCATAP, + VCARD, + DCT, + XSD, + SCHEMA, + RDFS, + ADMS, + CNT, + ELI, + # Default values + metadata_field_names, + eu_geodcat_ap_default_values, + ) + +#TODO: Implement GeoDCAT-AP 3 profile +class EuGeoDCATAP3Profile(EuGeoDCATAP2Profile, EuDCATAP3Profile, EuDCATAPSchemingDCATProfile): + """ + A custom RDF profile based on the GeoDCAT-AP 3 for data portals in Europe + + More information and specification: + + https://joinup.ec.europa.eu/collection/semic-support-centre/solution/geodcat-application-profile-data-portals-europe + + """ + + def parse_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + dataset_dict = self._parse_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + dataset_dict = self._parse_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 scheming fields + dataset_dict = self._parse_dataset_v2_scheming(dataset_dict, dataset_ref) + + # GeoDCAT-AP 2 properties + dataset_dict = self._parse_dataset_geodcat_ap_v2(dataset_dict, dataset_ref) + + return dataset_dict + + def graph_from_dataset(self, dataset_dict, dataset_ref): + + # Call base method for common properties + self._graph_from_dataset_base(dataset_dict, dataset_ref) + + # DCAT AP v2 properties also applied to higher versions + self._graph_from_dataset_v2(dataset_dict, dataset_ref) + + # DCAT AP v2 scheming fields + self._graph_from_dataset_v2_scheming(dataset_dict, dataset_ref) + + # GeoDCAT-AP 2 properties + self._graph_from_dataset_geodcat_ap_v2(dataset_dict, dataset_ref) + + # DCAT AP v3 properties also applied to higher versions + self._graph_from_dataset_v3(dataset_dict, dataset_ref) + + # GeoDCAT-AP 3 properties + self._graph_from_dataset_geodcat_ap_v3(dataset_dict, dataset_ref) + + + def graph_from_catalog(self, catalog_dict, catalog_ref): + + # Call base method for common properties + self._graph_from_catalog_base(catalog_dict, catalog_ref) + + # GeoDCAT-AP 2 Catalog properties + self._graph_from_catalog_geodcat_ap_v2(catalog_dict, catalog_ref) + + #TODO: Implement GeoDCAT-AP 3 + def _graph_from_dataset_geodcat_ap_v3(self, dataset_dict, dataset_ref): + pass \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/default/dotted.png b/ckanext/schemingdcat/public/images/default/dotted.png new file mode 100644 index 0000000..fa0ae80 Binary files /dev/null and b/ckanext/schemingdcat/public/images/default/dotted.png differ diff --git a/ckanext/schemingdcat/public/images/icons/endpoints/es_dcat.svg b/ckanext/schemingdcat/public/images/icons/endpoints/es_dcat.svg new file mode 100644 index 0000000..2ccad02 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/endpoints/es_dcat.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/endpoints/eu_dcat_ap.svg b/ckanext/schemingdcat/public/images/icons/endpoints/eu_dcat_ap.svg new file mode 100644 index 0000000..e402a7d --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/endpoints/eu_dcat_ap.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/alb.svg b/ckanext/schemingdcat/public/images/icons/language/language/alb.svg new file mode 100644 index 0000000..0672683 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/alb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/arm.svg b/ckanext/schemingdcat/public/images/icons/language/language/arm.svg new file mode 100644 index 0000000..f88fdd9 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/arm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/aut.svg b/ckanext/schemingdcat/public/images/icons/language/language/aut.svg new file mode 100644 index 0000000..3027560 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/aut.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/bel.svg b/ckanext/schemingdcat/public/images/icons/language/language/bel.svg new file mode 100644 index 0000000..7dd70cd --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/bel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/bih.svg b/ckanext/schemingdcat/public/images/icons/language/language/bih.svg new file mode 100644 index 0000000..451aff6 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/bih.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/blr.svg b/ckanext/schemingdcat/public/images/icons/language/language/blr.svg new file mode 100644 index 0000000..27038c1 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/blr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/bra.svg b/ckanext/schemingdcat/public/images/icons/language/language/bra.svg new file mode 100644 index 0000000..a727b0b --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/bra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/bul.svg b/ckanext/schemingdcat/public/images/icons/language/language/bul.svg new file mode 100644 index 0000000..cc2d8ea --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/bul.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/cat.jpg b/ckanext/schemingdcat/public/images/icons/language/language/cat.jpg new file mode 100644 index 0000000..8b477b0 Binary files /dev/null and b/ckanext/schemingdcat/public/images/icons/language/language/cat.jpg differ diff --git a/ckanext/schemingdcat/public/images/icons/language/language/ces.svg b/ckanext/schemingdcat/public/images/icons/language/language/ces.svg new file mode 100644 index 0000000..ab16d39 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/ces.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/che.svg b/ckanext/schemingdcat/public/images/icons/language/language/che.svg new file mode 100644 index 0000000..8270a5d --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/che.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/chn.svg b/ckanext/schemingdcat/public/images/icons/language/language/chn.svg new file mode 100644 index 0000000..9c4ccfd --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/chn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/cyp.svg b/ckanext/schemingdcat/public/images/icons/language/language/cyp.svg new file mode 100644 index 0000000..fa374b0 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/cyp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/dan.svg b/ckanext/schemingdcat/public/images/icons/language/language/dan.svg new file mode 100644 index 0000000..e9331fb --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/dan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/deu.svg b/ckanext/schemingdcat/public/images/icons/language/language/deu.svg new file mode 100644 index 0000000..7e8fc30 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/deu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/ell.svg b/ckanext/schemingdcat/public/images/icons/language/language/ell.svg new file mode 100644 index 0000000..40a9b74 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/ell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/eng.svg b/ckanext/schemingdcat/public/images/icons/language/language/eng.svg new file mode 100644 index 0000000..5e2686b --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/eng.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/esp.jpg b/ckanext/schemingdcat/public/images/icons/language/language/esp.jpg new file mode 100644 index 0000000..fb7eadf Binary files /dev/null and b/ckanext/schemingdcat/public/images/icons/language/language/esp.jpg differ diff --git a/ckanext/schemingdcat/public/images/icons/language/language/est.svg b/ckanext/schemingdcat/public/images/icons/language/language/est.svg new file mode 100644 index 0000000..513df60 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/est.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/eus.jpg b/ckanext/schemingdcat/public/images/icons/language/language/eus.jpg new file mode 100644 index 0000000..91e2d99 Binary files /dev/null and b/ckanext/schemingdcat/public/images/icons/language/language/eus.jpg differ diff --git a/ckanext/schemingdcat/public/images/icons/language/language/fin.svg b/ckanext/schemingdcat/public/images/icons/language/language/fin.svg new file mode 100644 index 0000000..8f07f06 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/fin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/fra.svg b/ckanext/schemingdcat/public/images/icons/language/language/fra.svg new file mode 100644 index 0000000..5ae2970 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/fra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/fro.svg b/ckanext/schemingdcat/public/images/icons/language/language/fro.svg new file mode 100644 index 0000000..005d779 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/fro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/gbr.svg b/ckanext/schemingdcat/public/images/icons/language/language/gbr.svg new file mode 100644 index 0000000..5e2686b --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/gbr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/geo.svg b/ckanext/schemingdcat/public/images/icons/language/language/geo.svg new file mode 100644 index 0000000..efee3fa --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/geo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/gle.svg b/ckanext/schemingdcat/public/images/icons/language/language/gle.svg new file mode 100644 index 0000000..068341d --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/gle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/glg.jpg b/ckanext/schemingdcat/public/images/icons/language/language/glg.jpg new file mode 100644 index 0000000..2a8ec55 Binary files /dev/null and b/ckanext/schemingdcat/public/images/icons/language/language/glg.jpg differ diff --git a/ckanext/schemingdcat/public/images/icons/language/language/grl.svg b/ckanext/schemingdcat/public/images/icons/language/language/grl.svg new file mode 100644 index 0000000..78bd04a --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/grl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/hrv.svg b/ckanext/schemingdcat/public/images/icons/language/language/hrv.svg new file mode 100644 index 0000000..0e58e92 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/hrv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/hun.svg b/ckanext/schemingdcat/public/images/icons/language/language/hun.svg new file mode 100644 index 0000000..22e1d2c --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/hun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/isl.svg b/ckanext/schemingdcat/public/images/icons/language/language/isl.svg new file mode 100644 index 0000000..d8379bb --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/isl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/isr.svg b/ckanext/schemingdcat/public/images/icons/language/language/isr.svg new file mode 100644 index 0000000..2cb609c --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/isr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/ita.svg b/ckanext/schemingdcat/public/images/icons/language/language/ita.svg new file mode 100644 index 0000000..3dd5084 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/ita.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/jpn.svg b/ckanext/schemingdcat/public/images/icons/language/language/jpn.svg new file mode 100644 index 0000000..8da2224 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/jpn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/lav.svg b/ckanext/schemingdcat/public/images/icons/language/language/lav.svg new file mode 100644 index 0000000..9e24cb9 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/lav.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/lie.svg b/ckanext/schemingdcat/public/images/icons/language/language/lie.svg new file mode 100644 index 0000000..3a951f2 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/lie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/lit.svg b/ckanext/schemingdcat/public/images/icons/language/language/lit.svg new file mode 100644 index 0000000..abbf2a4 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/lit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/ltz.svg b/ckanext/schemingdcat/public/images/icons/language/language/ltz.svg new file mode 100644 index 0000000..3d8f2a2 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/ltz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/mda.svg b/ckanext/schemingdcat/public/images/icons/language/language/mda.svg new file mode 100644 index 0000000..587f3fc --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/mda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/mkd.svg b/ckanext/schemingdcat/public/images/icons/language/language/mkd.svg new file mode 100644 index 0000000..bfcf17c --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/mkd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/mlt.svg b/ckanext/schemingdcat/public/images/icons/language/language/mlt.svg new file mode 100644 index 0000000..e467d5f --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/mlt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/mne.svg b/ckanext/schemingdcat/public/images/icons/language/language/mne.svg new file mode 100644 index 0000000..4b5565c --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/mne.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/nld.svg b/ckanext/schemingdcat/public/images/icons/language/language/nld.svg new file mode 100644 index 0000000..bdbff48 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/nld.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/nor.svg b/ckanext/schemingdcat/public/images/icons/language/language/nor.svg new file mode 100644 index 0000000..2a4946e --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/nor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/pol.svg b/ckanext/schemingdcat/public/images/icons/language/language/pol.svg new file mode 100644 index 0000000..3aa21b2 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/pol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/por.svg b/ckanext/schemingdcat/public/images/icons/language/language/por.svg new file mode 100644 index 0000000..8b8a558 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/por.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/rom.svg b/ckanext/schemingdcat/public/images/icons/language/language/rom.svg new file mode 100644 index 0000000..7600a94 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/rom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/rus.svg b/ckanext/schemingdcat/public/images/icons/language/language/rus.svg new file mode 100644 index 0000000..af8fc50 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/rus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/slk.svg b/ckanext/schemingdcat/public/images/icons/language/language/slk.svg new file mode 100644 index 0000000..7d45811 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/slk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/slv.svg b/ckanext/schemingdcat/public/images/icons/language/language/slv.svg new file mode 100644 index 0000000..9b3bee4 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/slv.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/spa.jpg b/ckanext/schemingdcat/public/images/icons/language/language/spa.jpg new file mode 100644 index 0000000..fb7eadf Binary files /dev/null and b/ckanext/schemingdcat/public/images/icons/language/language/spa.jpg differ diff --git a/ckanext/schemingdcat/public/images/icons/language/language/srb.svg b/ckanext/schemingdcat/public/images/icons/language/language/srb.svg new file mode 100644 index 0000000..c613da6 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/srb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/swe.svg b/ckanext/schemingdcat/public/images/icons/language/language/swe.svg new file mode 100644 index 0000000..11846d4 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/swe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/tur.svg b/ckanext/schemingdcat/public/images/icons/language/language/tur.svg new file mode 100644 index 0000000..d508741 --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/tur.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/images/icons/language/language/ukr.svg b/ckanext/schemingdcat/public/images/icons/language/language/ukr.svg new file mode 100644 index 0000000..1fe4a9b --- /dev/null +++ b/ckanext/schemingdcat/public/images/icons/language/language/ukr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ckanext/schemingdcat/public/static/licenses.json b/ckanext/schemingdcat/public/static/licenses.json index 74fbe1e..2a4876f 100644 --- a/ckanext/schemingdcat/public/static/licenses.json +++ b/ckanext/schemingdcat/public/static/licenses.json @@ -69,9 +69,9 @@ "url": "https://creativecommons.org/publicdomain/zero/1.0/" }, { - "domain_content": "False", - "domain_data": "False", - "domain_software": "False", + "domain_content": false, + "domain_data": false, + "domain_software": false, "family": "", "id": "cc-by", "maintainer": "", diff --git a/ckanext/schemingdcat/schemas/README.md b/ckanext/schemingdcat/schemas/README.md index 3499733..44afc9f 100644 --- a/ckanext/schemingdcat/schemas/README.md +++ b/ckanext/schemingdcat/schemas/README.md @@ -27,7 +27,7 @@ The following tables shows the mapping between the RDF DCAT model and the CKAN d > [`ckanext-scheming`](https://github.com/ckan/ckanext-scheming#common-schema-keys) common schema types. ## GeoDCAT-AP (ES) -This is a [**custom schema**](geodcatap_es/geodcatap_es_dataset.yaml) with specific extensions for spatial data and [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP)/[INSPIRE](https://github.com/INSPIRE-MIF/technical-guidelines) metadata [profiles](https://en.wikipedia.org/wiki/Geospatial_metadata). +This is a [**custom schema**](geodcat_ap/es_geodcat_ap_full.yaml) with specific extensions for spatial data and [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP)/[INSPIRE](https://github.com/INSPIRE-MIF/technical-guidelines) metadata [profiles](https://en.wikipedia.org/wiki/Geospatial_metadata). - [Datasets](#datasets) - [Distributions/Resources](#distributions) @@ -64,11 +64,11 @@ This is a [**custom schema**](geodcatap_es/geodcatap_es_dataset.yaml) with speci | foaf:Agent | dct:publisher | Responsible Party | Publisher email (M) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - publisher (R) | Responsible party - distributor(M) *Dataset responsible party (O) | - | - | publisher_email | 1 | | foaf:Agent | dct:publisher | Responsible Party | Publisher URL (R) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - publisher (R) | Responsible party - distributor(M) *Dataset responsible party (O) | - | - | publisher_url | 0.1 | | foaf:Agent | dct:publisher | Responsible Party | Publisher type (M) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - publisher (R) | Responsible party - distributor(M) *Dataset responsible party (O) | - | http://purl.org/adms/publishertype/ | publisher_type | 1 | -| vcard:Kind | dcat:contactPoint | Responsible Party | Maintainer name (R) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - contact point (R) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | maintainer_name | 0.1 | +| vcard:Kind | dcat:contactPoint | Responsible Party | Maintainer name (R) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - contact point (R) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | maintainer | 0.1 | | vcard:Kind | dcat:contactPoint | Responsible Party | Maintainer Identifier (R) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - contact point (R) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | maintainer_uri | 0.1 | | vcard:Kind | dcat:contactPoint | Responsible Party | Maintainer email (R) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - contact point (R) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | maintainer_email | 0.1 | | vcard:Kind | dcat:contactPoint | Responsible Party | Maintainer web (R) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.2. Recommended properties for Dataset - contact point (R) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | maintainer_url | 0.1 | -| vcard:Kind | dct:creator | Responsible Party | Author name (O) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.3. Optional properties for Dataset - creator (O) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | author_name | 0.1 | +| vcard:Kind | dct:creator | Responsible Party | Author name (O) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.3. Optional properties for Dataset - creator (O) | Responsible party - custodian (M) *Dataset responsible party (O) | - | - | author | 0.1 | | vcard:Kind | dct:creator | Responsible Party | Author Identifier (O) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.3. Optional properties for Dataset - creator (O) | Responsible party - author (M) *Dataset responsible party (O) | - | - | author_uri | 0.1 | | vcard:Kind | dct:creator | Responsible Party | Author email (O) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.3. Optional properties for Dataset - creator (O) | Responsible party - author (M) *Dataset responsible party (O) | - | - | author_mail | 0.1 | | vcard:Kind | dct:creator | Responsible Party | Author web (O) | B.6.16 Responsible party and metadata point of contact - *Dataset responsible party and *Metadata point of contact. (M) | 4.4.3. Optional properties for Dataset - creator (O) | Responsible party - author (M) *Dataset responsible party (O) | - | - | author_url | 0.1 | @@ -127,7 +127,7 @@ This is a [**custom schema**](geodcatap_es/geodcatap_es_dataset.yaml) with speci | dcat:Distribution | ? | Resource | Lineage process steps (O) | - | - | - | - | - | lineage_process_steps | 0.* | ## DCAT -[`schemas/dcat`](dcat/dcat_dataset.yaml) based +[`schemas/dcat`](dcat/dcat_full.yaml) based on: [DCAT](https://www.w3.org/TR/vocab-dcat-3/). - [Datasets](#datasets-1) @@ -141,7 +141,7 @@ TODO ## DCAT-AP (EU) -[`schemas/dcatap`](dcatap/dcatap_dataset.yaml) based on: [DCAT-AP](https://op.europa.eu/en/web/eu-vocabularies/dcat-ap) for the european context. +[`schemas/dcat_ap`](dcat_ap/eu_dcat_ap_full.yaml) based on: [DCAT-AP](https://op.europa.eu/en/web/eu-vocabularies/dcat-ap) for the european context. - [Datasets](#datasets-2) - [Distributions/Resources](#distributions-2) @@ -154,7 +154,7 @@ TODO ## GeoDCAT-AP (EU) -[`schemas/geodcatap`](geodcatap/geodcatap_dataset.yaml) based on: [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP) for the european context. +[`schemas/geodcat_ap`](geodcat_ap/es_geodcat_ap_full.yaml) based on: [GeoDCAT-AP](https://github.com/SEMICeu/GeoDCAT-AP) for the european context. - [Datasets](#datasets-3) - [Distributions/Resources](#distributions-3) diff --git a/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml b/ckanext/schemingdcat/schemas/dcat/dcat_full.yaml similarity index 98% rename from ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml rename to ckanext/schemingdcat/schemas/dcat/dcat_full.yaml index 19e3226..4b8dd4c 100644 --- a/ckanext/schemingdcat/schemas/dcatap/dcatap_dataset.yaml +++ b/ckanext/schemingdcat/schemas/dcat/dcat_full.yaml @@ -1,14 +1,16 @@ scheming_version: 2 dataset_type: dataset -about: "Datasets/Distributions: Adaptation for CKAN of the DCAT-AP vocabulary (https://semiceu.github.io/DCAT-AP/releases/3.0.0/). European context (EU27)" +about: "Datasets/Distributions: Adaptation for CKAN of the Data Catalog Vocabulary (DCAT) - Version 3 (https://www.w3.org/TR/vocab-dcat-3/)." about_url: https://github.com/mjanez/ckanext-schemingdcat form_languages: ["en", "es"] required_language: "en" -schema_version: 2.1 -schema_date: 2024-05-01 -schema_name: dcatap -schema_title: DCAT-AP -schema_description: DCAT Application profile for data portals in Europe (DCAT-AP) +schema_version: 3.0 +schema_date: 2024-08-01 +schema_name: dcat_full +schema_title: DCAT +schema_description: Data Catalog Vocabulary (DCAT) +schema_profile_version: 3.0.0 +schema_profile_url: https://www.w3.org/TR/vocab-dcat-3/ schema_form_groups: # Basic Info parties form_page (#1) - form_group_id: title @@ -56,18 +58,18 @@ schema_form_groups: label: en: Author information es: Información del autor - fa_icon: fa-pencil-square-o + fa_icon: fa-pencil-square # Quality form_page (#3) - form_group_id: standards label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square - form_group_id: temporal_info label: en: Timing es: Información temporal - fa_icon: fa-clock-o + fa_icon: fa-clock - form_group_id: lineage label: en: Provenance information @@ -125,7 +127,7 @@ schema_form_groups: label: en: Resource type information es: Información del tipo de recurso - fa_icon: fa-file-code-o + fa_icon: fa-file-code - form_group_id: resource_license_info label: en: License and restrictions @@ -140,7 +142,7 @@ schema_form_groups: label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square ### Codes in Schema # (M): Mandatory @@ -597,10 +599,6 @@ dataset_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano @@ -964,11 +962,11 @@ dataset_fields: help_allow_html: True form_group_id: standards -# Lineage statement (M) +# Provenance statement (M) - field_name: provenance label: - en: Lineage statement - es: Declaración de linaje + en: Provenance statement + es: Declaración de procedencia preset: schemingdcat_fluent_markdown display_property: dct:provenance form_placeholder: @@ -1175,20 +1173,6 @@ dataset_fields: help_text: en: 'URI identifying the related resource. You can include as many properties as you know of references.' es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' - form_group_id: lineage - -# Purpose (O) -- field_name: purpose - label: - en: Purpose - es: Propósito - form_placeholder: 'Environment management.' - preset: schemingdcat_fluent_text - help_text: - en: 'Summary of the intentions for which the dataset was developed (ISO 19115).' - es: 'Resumen de las intenciones para las que se desarrolló el conjunto de datos (ISO 19115).' - form_languages: ["en", "es"] - form_group_id: purpose # Character encoding (C) - field_name: encoding @@ -1880,10 +1864,6 @@ resource_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano diff --git a/ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_full.yaml b/ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_full.yaml new file mode 100644 index 0000000..86f2581 --- /dev/null +++ b/ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_full.yaml @@ -0,0 +1,3399 @@ +scheming_version: 2 +dataset_type: dataset +about: "Datasets/Distributions: Adaptation for CKAN of the DCAT-AP vocabulary (https://semiceu.github.io/DCAT-AP/releases/2.1.1). European context (EU27)" +about_url: https://github.com/mjanez/ckanext-schemingdcat +form_languages: ["es", "en"] +required_language: "es" +schema_version: 3.0 +schema_date: 2024-08-01 +schema_name: es_dcat_ap_full +schema_title: DCAT-AP +schema_description: DCAT Application profile for data portals in Europe (DCAT-AP) +schema_profile_version: 2.1.1 +schema_profile_url: https://semiceu.github.io/DCAT-AP/releases/2.1.1 +schema_form_groups: + # Basic Info parties form_page (#1) + - form_group_id: title + label: + en: Title + es: Título + fa_icon: fa-sticky-note + - form_group_id: general_info + label: + en: General information + es: Información general + fa_icon: fa-info-circle + - form_group_id: identification + label: + en: Dataset identification + es: Identificación del conjunto de datos + fa_icon: fa-id-card + - form_group_id: notes + label: + en: Abstract + es: Resumen + fa_icon: fa-file-text + - form_group_id: vocabs + label: + en: Vocabs information + es: Información de vocabularios + fa_icon: fa-database + - form_group_id: contact + label: + en: Contact information + es: Información de contacto + fa_icon: fa-address-book + # Responsible parties form_page (#2) + - form_group_id: publisher + label: + en: Publisher information + es: Información del publicador + fa_icon: fa-user + - form_group_id: maintainer + label: + en: Maintainer information + es: Información del mantenedor + fa_icon: fa-server + - form_group_id: author + label: + en: Author information + es: Información del autor + fa_icon: fa-pencil-square + # Quality form_page (#3) + - form_group_id: standards + label: + en: Standards compliance + es: Adecuación a estándares + fa_icon: fa-check-square + - form_group_id: temporal_info + label: + en: Timing + es: Información temporal + fa_icon: fa-clock + - form_group_id: lineage + label: + en: Provenance information + es: Información de procedencia + fa_icon: fa-history + - form_group_id: purpose + label: + en: Purpose of the dataset + es: Propósito del conjunto de datos + fa_icon: fa-question-circle + # Spatial form_page (#4) + - form_group_id: spatial_info + label: + en: Location information + es: Información sobre localización + fa_icon: fa-map-marker + # License form_page (#5) + - form_group_id: license_info + label: + en: License and restrictions + es: Licencia y restricciones + fa_icon: fa-lock + - form_group_id: version_notes + label: + en: Version information + es: Información sobre versiones + fa_icon: fa-info-circle + # Resources form_page + - form_group_id: resource_title + label: + en: Title + es: Título + fa_icon: fa-sticky-note + - form_group_id: resource_notes + label: + en: Abstract + es: Resumen + fa_icon: fa-file-text + - form_group_id: resource_identification + label: + en: Resource identification + es: Identificación del recurso + fa_icon: fa-id-card + - form_group_id: resource_url + label: + en: Resource locator + es: Localizador del recurso + - form_group_id: resource_access_service + label: + en: Data Service of the resource + es: Servicio de datos del recurso + fa_icon: fa-asterisk + - form_group_id: resource_distribution + label: + en: Information on resource distribution + es: Información de la distribución del recurso + fa_icon: fa-list-ul + - form_group_id: resource_type + label: + en: Resource type information + es: Información del tipo de recurso + fa_icon: fa-file-code + - form_group_id: resource_license_info + label: + en: License and restrictions + es: Licencia y restricciones + fa_icon: fa-lock + - form_group_id: resource_lineage + label: + en: Provenance information + es: Información de procedencia + fa_icon: fa-history + - form_group_id: resource_standards + label: + en: Standards compliance + es: Adecuación a estándares + fa_icon: fa-check-square + - form_group_id: resource_relations + label: + en: Related resources + es: Recursos relacionados + fa_icon: fa-code-fork +schema_form_tabs: + # Dataset tabs + - form_tab: basic_tab + tab_type: dataset_fields + label: + en: Identification + es: Identificación + form_group_id: + - title + - general_info + - identification + - notes + - form_tab: vocabs_tab + tab_type: dataset_fields + label: + en: Vocabs + es: Vocabularios + form_group_id: + - vocabs + - form_tab: contact_tab + tab_type: dataset_fields + label: + en: Contact point + es: Punto de contacto + form_group_id: + - contact + - form_tab: publisher_tab + tab_type: dataset_fields + label: + en: Publisher + es: Publicador + form_group_id: + - publisher + - form_tab: responsible_parties_tab + tab_type: dataset_fields + label: + en: Responsible parties + es: Responsables + form_group_id: + - maintainer + - author + - form_tab: quality_tab + tab_type: dataset_fields + label: + en: Quality + es: Calidad + form_group_id: + - standards + - temporal_info + - form_tab: lineage_tab + tab_type: dataset_fields + label: + en: Lineage + es: Linaje + form_group_id: + - lineage + - purpose + - form_tab: spatial_tab + tab_type: dataset_fields + label: + en: Spatial + es: Espacial + form_group_id: + - spatial_info + - form_tab: license_tab + tab_type: dataset_fields + label: + en: License + es: Licencia + form_group_id: + - license_info + - version_notes + # Distribution tabs + - form_tab: resource_basic_tab + tab_type: resource_fields + label: + en: Identification + es: Identificación + form_group_id: + - resource_title + - resource_url + - resource_notes + - resource_identification + - form_tab: resource_distribution + tab_type: resource_fields + label: + en: Distribution + es: Distribución + form_group_id: + - resource_distribution + - resource_type + - resource_access_service + - form_tab: resource_lineage_tab + tab_type: resource_fields + label: + en: Lineage + es: Linaje + form_group_id: + - resource_lineage + - resource_relations + - form_tab: resource_quality_tab + tab_type: resource_fields + label: + en: Quality + es: Calidad + form_group_id: + - resource_standards + - form_tab: resource_license_tab + tab_type: resource_fields + label: + en: License + es: Licencia + form_group_id: + - resource_license_info + +### Codes in Schema +# (M): Mandatory +# (R): Recommended +# (C): Conditional +# (O): Optional + +#--Dataset (dcat:Dataset) fields--# +dataset_fields: + +# Dataset title translated (M) +- field_name: title_translated + label: + en: Dataset title + es: Título del conjunto de datos + preset: schemingdcat_fluent_title_translated + required: True + display_property: dct:title + form_placeholder: + en: e.g. A descriptive title. + es: ej. Un título descriptivo. + form_languages: ["es", "en"] + required_language: "es" + form_group_id: title + +# Metadata template for schemingdcat_xls harvester +- field_name: schemingdcat_xls_metadata_template + label: + en: Metadata template for schemingdcat_xls harvester + es: Plantilla de metadatos para el cosechador schemingdcat_xls + preset: schemingdcat_xls_metadata_template + required: False + choices: + - label: + en: "No" + es: "No" + value: False + - label: + en: "Yes" + es: "Si" + value: True + help_text: + en: 'ckanext-schemingdcat remote Google Sheet/Onedrive Excel metadata harvester' + es: 'ckanext-schemingdcat cosechador de ficheros remotos Google Sheet/Onedrive Excel/a>' + form_group_id: general_info + +# Non-spatial Dataset (Hidden field, based on dcat_type) +- field_name: dataset_scope + label: + en: Scope of the data + es: Alcance de los datos + preset: dataset_scope + required: False + choices: + - label: + en: "Non-spatial dataset" + es: "Conjunto de datos no espaciales" + value: non_spatial_dataset + - label: + en: "Spatial dataset" + es: "Conjunto de datos espaciales" + value: spatial_dataset + form_group_id: general_info + +# CKAN Organization (M) // Dataset privacy (M) +- field_name: owner_org + label: + en: Organization + es: Organización + required: True + help_text: + en: Entity (organisation) responsible for making the Dataset available. + es: Entidad (organización) responsable de publicar el conjunto de datos. + preset: dataset_organization + form_group_id: general_info + +# Graphic overview (O) +- field_name: graphic_overview + label: + en: Graphic overview of the dataset + es: Descripción gráfica del conjunto de datos + display_snippet: schemingdcat/display_snippets/graphic_overview.html + form_placeholder: http://example.com/dataset.jpg + help_text: + en: "Graphic that provides an illustration of the dataset." + es: "Gráfico que ilustra el conjunto de datos." + form_group_id: general_info + +# Metadata file identifier (M) +## Unique resource identifier (UUID) (Mandatory). If it does not exist, CKAN creates a UUID (Metadata file identifier 'package_id') +- field_name: identifier + label: + en: Metadata identifier + es: Identificador de los metadatos + preset: schemingdcat_identifier + required: True + display_property: dct:identifier + form_placeholder: 123e4567-e89b-12d3-a456-426614174000 + help_text: + en: e.g. Unique resource identifier (UUID). + es: Ej. Identificador único de recurso (UUID). + help_allow_html: True + form_group_id: identification + +# Dataset locator (O) +## For all resources that is equivalent to this element, such as a URI (of dcat:Dataset). +- field_name: name + label: + en: URL + es: URL + preset: schemingdcat_dataset_slug + display_property: dcat:landingPage + form_placeholder: + en: URL title Dataset + es: Título de la URL del Dataset + form_slug_related: identifier + form_group_id: identification + +# Dataset type (M) +- field_name: dcat_type + label: + en: Resource type + es: Tipo de recurso + preset: select_not_empty + form_include_blank_choice: False + required: True + display_property: dct:type + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Spatial data set + es: Conjunto de datos espacial + value: http://inspire.ec.europa.eu/metadata-codelist/ResourceType/dataset + dataset_scope: spatial_dataset + - label: + en: Article + es: Artículo + value: http://id.loc.gov/vocabulary/marcgt/art + dataset_scope: non_spatial_dataset + - label: + en: Bibliographic data + es: Datos bibliográficos + value: http://id.loc.gov/vocabulary/marcgt/bda + dataset_scope: non_spatial_dataset + - label: + en: Collection + es: Colección + value: http://purl.org/dc/dcmitype/Collection + dataset_scope: non_spatial_dataset + - label: + en: Database + es: Base de datos + value: http://id.loc.gov/vocabulary/marcgt/dtb + dataset_scope: non_spatial_dataset + - label: + en: Document (computer) + es: Documento (informático) + value: http://id.loc.gov/vocabulary/marcgt/doc + dataset_scope: non_spatial_dataset + - label: + en: Event + es: Evento + value: http://purl.org/dc/dcmitype/Event + dataset_scope: non_spatial_dataset + - label: + en: Government publication + es: Publicación gubernamental + value: http://id.loc.gov/vocabulary/marcgt/gov + dataset_scope: non_spatial_dataset + - label: + en: Image + es: Imagen + value: http://purl.org/dc/dcmitype/Image + dataset_scope: non_spatial_dataset + - label: + en: Still Image + es: Imagen fija + value: http://purl.org/dc/dcmitype/StillImage + dataset_scope: non_spatial_dataset + - label: + en: Journal + es: Revista + value: http://id.loc.gov/vocabulary/marcgt/jou + dataset_scope: non_spatial_dataset + - label: + en: Legislation + es: Legislación + value: http://id.loc.gov/vocabulary/marcgt/leg + dataset_scope: non_spatial_dataset + - label: + en: Moving Image + es: Imagen en movimiento + value: http://purl.org/dc/dcmitype/MovingImage + dataset_scope: non_spatial_dataset + - label: + en: Physical Object + es: Objeto físico + value: http://purl.org/dc/dcmitype/PhysicalObject + dataset_scope: non_spatial_dataset + - label: + en: Reporting + es: Informe + value: http://id.loc.gov/vocabulary/marcgt/rpt + dataset_scope: non_spatial_dataset + - label: + en: Interactive Resource + es: Recurso interactivo + value: http://purl.org/dc/dcmitype/InteractiveResource + dataset_scope: non_spatial_dataset + - label: + en: Spatial data set series + es: Series de datos espaciales + value: http://inspire.ec.europa.eu/metadata-codelist/ResourceType/series + dataset_scope: spatial_dataset + - label: + en: Service + es: Servicio + value: http://purl.org/dc/dcmitype/Service + dataset_scope: non_spatial_dataset + - label: + en: Spatial data service + es: Servicio de datos espaciales + value: http://inspire.ec.europa.eu/metadata-codelist/ResourceType/service + dataset_scope: spatial_dataset + - label: + en: Sound + es: Sonido + value: http://purl.org/dc/dcmitype/Sound + dataset_scope: non_spatial_dataset + - label: + en: Software + es: Software + value: http://purl.org/dc/dcmitype/Software + dataset_scope: non_spatial_dataset + - label: + en: Standard or specification + es: Norma o especificación + value: http://id.loc.gov/vocabulary/marcgt/stp + dataset_scope: non_spatial_dataset + - label: + en: Technical report + es: Informe técnico + value: http://id.loc.gov/vocabulary/marcgt/ter + dataset_scope: non_spatial_dataset + - label: + en: Text + es: Texto + value: http://purl.org/dc/dcmitype/Text + dataset_scope: non_spatial_dataset + form_group_id: identification + +# NTI-RISP Theme (M) +## Taxonomy [NTI-RISP Annex IV](http://www.boe.es/eli/es/res/2013/02/19/(4)/con#aniv) +- field_name: theme_es + label: + en: Themes (NTI-RISP) + es: Temáticas (NTI-RISP) + preset: multiple_choice_icon + display_property: dcat:theme + select_size: 10 + required: True + help_text: + en: 'Themes (NTI-RISP Annex IV)' + es: 'Temáticas (Anexo IV NTI-RISP)' + help_allow_html: True + sorted_choices: True + choices: + - value: http://datos.gob.es/kos/sector-publico/sector/ciencia-tecnologia + notation: ciencia-tecnologia + label: + en: Science and technology + es: Ciencia y tecnología + ca: Ciència i tecnologia + gl: Ciencia e tecnoloxía + eu: Zientzia eta teknologia + description: + en: '' + es: 'Incluye: Innovación, Investigación, I/u002BD/u002BI, Telecomunicaciones, + Inernet y Sociedad de la Información.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/TECH + - value: http://datos.gob.es/kos/sector-publico/sector/comercio + notation: comercio + label: + en: Commerce + es: Comercio + ca: Comerç + gl: Comercio + eu: Merkataritza + description: + en: '' + es: 'Incluye: Consumo.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON + - value: http://datos.gob.es/kos/sector-publico/sector/cultura-ocio + notation: cultura-ocio + label: + en: Culture and leisure + es: Cultura y ocio + ca: Cultura i lleure + gl: Cultura e lecer + eu: Kultura eta aisia + description: + en: '' + es: 'Incluye: Tiempo libre.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/EDUC + - value: http://datos.gob.es/kos/sector-publico/sector/demografia + notation: demografia + label: + en: Demography + es: Demografía + ca: Demografia + gl: Demografía + eu: Demografia + description: + en: '' + es: 'Incluye: Inmigración y Emigración, Familia, Mujeres, Infancia, Mayores, + Padrón.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/SOCI + - value: http://datos.gob.es/kos/sector-publico/sector/deporte + notation: deporte + label: + en: Sport + es: Deporte + ca: Esport + gl: Deporte + eu: Kirola + description: + en: '' + es: 'Incluye: Instalaciones deportivas, Federaciones, Competiciones.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/EDUC + - value: http://datos.gob.es/kos/sector-publico/sector/economia + notation: economia + label: + en: Economy + es: Economía + ca: Economia + gl: Economía + eu: Ekonomia + description: + en: '' + es: 'Incluye: Deuda, Moneda y Banca y finanzas.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON + - value: http://datos.gob.es/kos/sector-publico/sector/educacion + notation: educacion + label: + en: Education + es: Educación + ca: Educació + gl: Educación + eu: Hezkuntza + description: + en: '' + es: 'Incluye: Formación.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/EDUC + - value: http://datos.gob.es/kos/sector-publico/sector/empleo + notation: empleo + label: + en: Employment + es: Empleo + ca: Ocupació + gl: Emprego + eu: Enplegua + description: + en: '' + es: 'Incluye: Trabajo, Mercado laboral.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON + - value: http://datos.gob.es/kos/sector-publico/sector/energia + notation: energia + label: + en: Energy + es: Energía + ca: Energia + gl: Enerxía + eu: Energia + description: + en: '' + es: 'Incluye: Fuentes renovables.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ENER + - value: http://datos.gob.es/kos/sector-publico/sector/hacienda + notation: hacienda + label: + en: Treasury + es: Hacienda + ca: Hisenda + gl: Facenda + eu: Ogasuna + description: + en: '' + es: 'Incluye: Impuestos.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/GOVE + - value: http://datos.gob.es/kos/sector-publico/sector/industria + notation: industria + label: + en: Industry + es: Industria + ca: Indústria + gl: Industria + eu: Industria + description: + en: '' + es: 'Incluye: Minería.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON + - value: http://datos.gob.es/kos/sector-publico/sector/legislacion-justicia + notation: legislacion-justicia + label: + en: Legislation and justice + es: Legislación y justicia + ca: Legislació i justícia + gl: Lexislación e xustiza + eu: Legegintza eta justizia + description: + en: '' + es: 'Incluye: Registros.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/JUST + - value: http://datos.gob.es/kos/sector-publico/sector/medio-ambiente + notation: medio-ambiente + label: + en: Environment + es: Medio ambiente + ca: Medi ambient + gl: Medio ambiente + eu: Ingurumena + description: + en: '' + es: 'Incluye: Meteorología, Geografía, Conservación fauna y flora.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ENVI + - value: http://datos.gob.es/kos/sector-publico/sector/medio-rural-pesca + notation: medio-rural-pesca + label: + en: Rural environment + es: Medio Rural + ca: Medi rural + gl: Medio rural + eu: Nekazaritza + description: + en: '' + es: 'Incluye: Agricultura, Ganadería, Pesca y Silvicultura.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/AGRI + - value: http://datos.gob.es/kos/sector-publico/sector/salud + notation: salud + label: + en: Healthcare + es: Salud + ca: Salut + gl: Saúde + eu: Osasuna + description: + en: '' + es: 'Incluye: Sanidad.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/HEAL + - value: http://datos.gob.es/kos/sector-publico/sector/sector-publico + notation: sector-publico + label: + en: Public sector + es: Sector público + ca: Sector públic + gl: Sector público + eu: Sektore publikoa + description: + en: '' + es: 'Incluye: Presupuestos, Organigrama institucional, Legislación interna, + Función pública.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/GOVE + - value: http://datos.gob.es/kos/sector-publico/sector/seguridad + notation: seguridad + label: + en: Security + es: Seguridad + ca: Seguretat + gl: Seguridade + eu: Segurtasuna + description: + en: '' + es: 'Incluye: Protección civil, Defensa.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/JUST + - value: http://datos.gob.es/kos/sector-publico/sector/sociedad-bienestar + notation: sociedad-bienestar + label: + en: Society and welfare + es: Sociedad y bienestar + ca: Societat i benestar + gl: Sociedade e benestar + eu: Gizartea eta ongizatea + description: + en: '' + es: 'Incluye: Participación ciudadana, Marginación, Envejecimiento Activo, Autonomía + personal y Dependencia, Invalidez, Jubilación, Seguros y Pensiones, Prestaciones + y Subvenciones.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/SOCI + - value: http://datos.gob.es/kos/sector-publico/sector/transporte + notation: transporte + label: + en: Transport + es: Transporte + ca: Transport + gl: Transporte + eu: Garraioa + description: + en: '' + es: 'Incluye: Comunicaciones y Tr/u00E1fico.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/TRAN + - value: http://datos.gob.es/kos/sector-publico/sector/turismo + notation: turismo + label: + en: Tourism + es: Turismo + ca: Turisme + gl: Turismo + eu: Turismoa + description: + en: '' + es: 'Incluye: Alojamientos, Hostelería, Gastronomía.' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON + - value: http://datos.gob.es/kos/sector-publico/sector/urbanismo-infraestructuras + notation: urbanismo-infraestructuras + label: + en: Town planning and infrastructures + es: Urbanismo e infraestructuras + ca: Urbanisme i infraestructures + gl: Urbanismo e infraestruturas + eu: Hirigintza eta azpiegiturak + description: + en: '' + es: 'Incluye: Saneamiento público, Construcción (infraestructuras, equipamientos + públicos).' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/REGI + - value: http://datos.gob.es/kos/sector-publico/sector/vivienda + notation: vivienda + label: + en: Housing + es: Vivienda + ca: Habitatge + gl: Vivenda + eu: Etxebizitza + description: + en: '' + es: 'Incluye: Mercado inmobiliario, Construcción (viviendas).' + ca: '' + gl: '' + eu: '' + dcat_ap: http://publications.europa.eu/resource/authority/data-theme/REGI + form_group_id: identification + +# High-value dataset category (R) +- field_name: hvd_category + label: + en: High-value dataset category + es: Categoría del conjunto de alto valor (HVD) + preset: select + display_property: dcatap:hvdCategory + display_snippet: schemingdcat/display_snippets/link_schema.html + help_text: + en: 'More info: High-value datasets - Overview, Vocab - EU Publications and Implementing Act (European Commission)' + es: 'Referencias: Conjuntos de alto valor - Visión generale, Vocabulario - EU Publications y Reglamento de Implementación (Comisión Europea)' + help_allow_html: True + sorted_choices: True + choices: + - label: + en: Meteorological + es: Meteorología + value: http://data.europa.eu/bna/c_164e0bf5 + - label: + en: Companies and company ownership + es: Sociedades y propiedad de sociedades + value: http://data.europa.eu/bna/c_a9135398 + - label: + en: Geospatial + es: Geospacial + value: http://data.europa.eu/bna/c_ac64a52d + - label: + en: Mobility + es: Movilidad + value: http://data.europa.eu/bna/c_b79e35eb + - label: + en: Earth observation and environment + es: Observación de la Tierra y medio ambiente + value: http://data.europa.eu/bna/c_dd313021 + - label: + en: Statistics + es: Estadística + value: http://data.europa.eu/bna/c_e1da4e07 + form_group_id: identification + +# Metadata file language (M) +- field_name: language + label: + en: Metadata language + es: Idioma de los metadatos + preset: select_not_empty + display_property: dct:language + display_snippet: schemingdcat/display_snippets/link_schema.html + form_include_blank_choice: False + required: True + sorted_choices: True + choices: + - label: + en: Spanish + es: Español + value: http://publications.europa.eu/resource/authority/language/SPA + - label: + en: Catalan + es: Catalán + value: http://publications.europa.eu/resource/authority/language/CAT + - label: + en: Basque + es: Vasco + value: http://publications.europa.eu/resource/authority/language/EUS + - label: + en: Galician + es: Gallego + value: http://publications.europa.eu/resource/authority/language/GLG + - label: + en: Valencian + es: Valenciano + value: http://publications.europa.eu/resource/authority/language/CAT + - label: + en: English + es: Inglés + value: http://publications.europa.eu/resource/authority/language/ENG + - label: + en: German + es: Alemán + value: http://publications.europa.eu/resource/authority/language/DEU + - label: + en: French + es: Francés + value: http://publications.europa.eu/resource/authority/language/FRA + - label: + en: Italian + es: Italiano + value: http://publications.europa.eu/resource/authority/language/ITA + - label: + en: Dutch + es: Neerlandés + value: http://publications.europa.eu/resource/authority/language/NLD + - label: + en: Danish + es: Danés + value: http://publications.europa.eu/resource/authority/language/DAN + - label: + en: Greek + es: Griego + value: http://publications.europa.eu/resource/authority/language/ELL + - label: + en: Portuguese + es: Portugués + value: http://publications.europa.eu/resource/authority/language/POR + - label: + en: Finnish + es: Finés + value: http://publications.europa.eu/resource/authority/language/FIN + - label: + en: Swedish + es: Sueco + value: http://publications.europa.eu/resource/authority/language/SWE + - label: + en: Czech + es: Checo + value: http://publications.europa.eu/resource/authority/language/CES + - label: + en: Estonian + es: Estonio + value: http://publications.europa.eu/resource/authority/language/EST + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Hungarian + es: Húngaro + value: http://publications.europa.eu/resource/authority/language/HUN + - label: + en: Latvian + es: Letón + value: http://publications.europa.eu/resource/authority/language/LAV + - label: + en: Lithuanian + es: Lituano + value: http://publications.europa.eu/resource/authority/language/LIT + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Luxembourgish + es: Luxemburgués + value: http://publications.europa.eu/resource/authority/language/LTZ + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + form_group_id: identification + +# Date of creation (O) +- field_name: created + label: + en: Date of creation + es: Fecha de creación + display_property: dct:created + preset: date_created + form_group_id: identification + +# Date of last revision (O) +- field_name: modified + label: + en: Date of last revision + es: Fecha de última modificación + display_snippet: schemingdcat/display_snippets/last_update.html + display_property: dct:modified + preset: date_modified + form_group_id: identification + +# # Dataset abstract translated (M) +- field_name: notes_translated + label: + en: Dataset abstract + es: Resumen del conjunto de datos + preset: schemingdcat_fluent_notes_translated + required: True + display_property: dct:description + form_placeholder: + en: e.g. Some useful description about the dataset. + es: ej. Una descripción útil sobre el conjunto de datos. + form_languages: ["es", "en"] + required_language: "es" + default_values: + en: Default abstract of the {dataset}. + es: Resumen por defecto del conjunto de datos {dataset}. + form_group_id: notes +# Keyword value (M) +- field_name: tag_string + label: + en: Keywords + es: Palabras clave + preset: tag_string_autocomplete + display_property: dct:subject + form_placeholder: 'payments' + help_text: + en: 'A keyword or tag describing the resource.' + es: 'Palabra clave o etiqueta que describe el recurso.' + form_group_id: vocabs + +# Keyword URI (M) +## TODO: Improve form_snippet to generate tag_uri auto from tag_string +## TODO: Add as scheming_datastore_choices (helpers.py/#102) http://github.com/ckan/ckanext-scheming/issues/270 +## Only for ckanext-dcat profiles.py +- field_name: tag_uri + label: + en: Keyword URIs + es: URI de palabras clave + preset: multiple_text + display_snippet: schemingdcat/display_snippets/list_keywords.html + form_placeholder: 'http://inspire.ec.europa.eu/metadata-codelist/IACSData/gsaa' + help_text: + en: 'e.g. Metadata code list register (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + form_group_id: vocabs + +# TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py +# Metadata point of contact URI (M) +- field_name: contact_uri + label: + en: URI of the Metadata contact point + es: URI del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://orgs.vocab.org/some-org + form_group_id: contact + +# Metadata point of contact name (M) +- field_name: contact_name + label: + en: Metadata contact point name + es: Nombre del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields + display_property: dcat:contactPoint + form_placeholder: José Blanco + form_group_id: contact + +# Metadata point of contact email (M) +- field_name: contact_email + label: + en: Metadata contact point email + es: Email del punto de contacto de los Metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: email + validators: not_empty scheming_required schemingdcat_valid_email schemingdcat_fill_dependent_fields + required: True + display_property: vcard:hasEmail + display_snippet: email.html + form_placeholder: joseblanco@example.com + form_group_id: contact + +# Metadata point of contact Web (R) +- field_name: contact_url + label: + en: Website of the Metadata contact point + es: Web del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: url + preset: valid_url_dependent_fields + display_property: vcard:hasURL + form_placeholder: http://www.example.com + form_group_id: contact + +# GeoDCAT-AP: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact +- field_name: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + display_property: dcat:hadRole + dependent_fields: + field_name: contact + subfields: + - field_name: role + preset: select_dependent_fields + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Resource Provider + es: Proveedor de recursos + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/resourceProvider + geodcatap: geodcatap:resourceProvider + - label: + en: Custodian + es: Custodio + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/custodian + geodcatap: geodcatap:custodian + - label: + en: Owner + es: Propietario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/owner + geodcatap: dct:rightsHolder + - label: + en: User + es: Usuario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/user + geodcatap: geodcatap:user + - label: + en: Distributor + es: Distribuidor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/distributor + geodcatap: geodcatap:distributor + - label: + en: Originator + es: Originador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/originator + geodcatap: geodcatap:originator + - label: + en: Point of Contact + es: Punto de contacto + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/pointOfContact + geodcatap: dcat:contactPoint + - label: + en: Principal Investigator + es: Investigador principal + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/principalInvestigator + geodcatap: geodcatap:principalInvestigator + - label: + en: Processor + es: Procesador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/processor + geodcatap: geodcatap:processor + - label: + en: Publisher + es: Editor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/publisher + geodcatap: dct:publisher + - label: + en: Author + es: Autor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/author + geodcatap: dct:creator + form_group_id: contact + + +# TO MIGRATE: contact dict. Filling with contact_* values +- field_name: contact + label: + en: Contact points + es: Puntos de contacto + repeating_label: + en: Contact point + es: Punto de contacto + form_snippet: null + display_snippet: null + repeating_subfields: + - field_name: uri + legacy: contact_uri + label: + en: URI of the Metadata contact point + es: URI del punto de contacto de los metadatos + + - field_name: name + legacy: contact_name + label: + en: Metadata contact point name + es: Nombre del punto de contacto de los metadatos + + - field_name: email + legacy: contact_email + label: + en: Metadata contact point email + es: Email del punto de contacto de los Metadatos + + - field_name: url + legacy: contact_url + label: + en: Website of the Metadata contact point + es: Web del punto de contacto de los metadatos + + - field_name: role + legacy: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + + help_text: + en: 'Contact information for enquiries about the dataset.' + es: 'Información de contacto para consultas sobre el conjunto de datos.' + form_group_id: contact + + +# Publisher party (M) +- field_name: publisher_name + label: + en: Name of the publisher + es: Nombre del publicador + display_property: foaf:name + form_placeholder: José Blanco + dependent_fields: + field_name: publisher + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields + help_text: + en: "A party that makes a dataset available to others." + es: "Persona u organización que pone a disposición de otros el conjunto de datos." + form_group_id: publisher + +# Publisher identifier (M) +- field_name: publisher_identifier + label: + en: Identifier of the publisher + es: Identificador del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: identifier + validators: schemingdcat_fill_dependent_fields + display_property: dct:identifier + form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 + help_text: + en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." + es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" + help_allow_html: True + form_group_id: publisher + +# Publisher URI (M) +- field_name: publisher_uri + label: + en: URI of the publisher + es: URI del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields + display_snippet: schemingdcat/display_snippets/link_name.html + form_snippet: schemingdcat/form_snippets/publisher_uri.html + form_placeholder: http://orgs.vocab.org/some-org + help_text: + en: This property refers to an Agent (organisation) responsible for making the Catalogue Record available. URI + es: Esta propiedad se refiere a un agente (organización) responsable de poner a disposición el recurso del catálogo. URI + form_group_id: publisher + +# Publisher email (M) +- field_name: publisher_email + label: + en: Email of the publisher + es: Email del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: email + preset: schemingdcat_valid_email_dependent_fields + display_property: foaf:mbox + form_placeholder: joseblanco@example.com + form_group_id: publisher + +# Publisher URL (O) +- field_name: publisher_url + label: + en: Website of the publisher + es: Web del publicador + display_property: foaf:homepage + form_placeholder: http://www.example.com + dependent_fields: + field_name: publisher + subfields: + - field_name: url + preset: valid_url_dependent_fields + help_text: + en: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL + es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL + form_group_id: publisher + +# Publisher type (M) +- field_name: publisher_type + label: + en: Type of the publisher + es: Tipo de publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: type + preset: select_dependent_fields + display_property: dct:type + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: National authority + es: Autoridad nacional + value: http://purl.org/adms/publishertype/NationalAuthority + - label: + en: Regional authority + es: Autoridad regional + value: http://purl.org/adms/publishertype/RegionalAuthority + - label: + en: Supranational authority + es: Autoridad supranacional + value: http://purl.org/adms/publishertype/SupraNationalAuthority + - label: + en: Local authority + es: Autoridad local + value: http://purl.org/adms/publishertype/LocalAuthority + - label: + en: Academia-Scientific organisation + es: Organización académica-científica + value: http://purl.org/adms/publishertype/Academia-ScientificOrganisation + - label: + en: Non profit organisation + es: Organización sin animo de lucro + value: http://purl.org/adms/publishertype/NonProfitOrganisation + - label: + en: Company + es: Empresa + value: http://purl.org/adms/publishertype/Company + - label: + en: Industry consortium + es: Consorcio industrial + value: http://purl.org/adms/publishertype/IndustryConsortium + - label: + en: Non Governmental Organisation + es: Organización no gubernamental (ONG) + value: http://purl.org/adms/publishertype/NonGovernmentalOrganisation + - label: + en: Private individual(s) + es: Individuo(s) privado(s) + value: http://purl.org/adms/publishertype/PrivateIndividual(s) + - label: + en: Standardisation body + es: Organismo de normalización + value: http://purl.org/adms/publishertype/StandardisationBody + form_group_id: publisher + +# TO MIGRATE: Publisher dict. Filling with publisher_* values +- field_name: publisher + label: + en: Publisher + es: Publicador + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: publisher_uri + label: + en: URI of the publisher + es: URI del publicador + + - field_name: name + legacy: publisher_name + label: + en: URI + es: URI + + - field_name: email + legacy: publisher_email + label: + en: Email of the publisher + es: Email del publicador + + - field_name: identifier + legacy: publisher_identifier + label: + en: Identifier of the publisher + es: Identificador del publicador + + - field_name: url + legacy: publisher_url + label: + en: Website of the publisher + es: Web del publicador + + - field_name: type + legacy: publisher_type + label: + en: Type of the publisher + es: Tipo de publicador + + help_text: + en: 'Entity responsible for making the dataset available.' + es: 'Entidad responsable de la puesta a disposición del conjunto de datos.' + form_group_id: publisher + +# Maintainer name (O) +- field_name: maintainer + label: + en: Name of the dataset maintainer + es: Nombre del mantenedor + display_property: dcat:contactPoint + form_placeholder: José Blanco + help_text: + en: "Person or organization responsible for maintaining or updating a dataset." + es: "Persona u organización responsable de mantener o actualizar un conjunto de datos." + form_group_id: maintainer + +# Maintainer name (O). Fallback, CKAN using maintainer in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: maintainer_name + label: + en: Name of the dataset maintainer + es: Nombre del mantenedor + validators: if_empty_same_as(maintainer) unicode_safe + preset: hide_fallback + form_group_id: maintainer + +# Maintainer Identifier (O) +- field_name: maintainer_uri + label: + en: Identifier of the dataset maintainer + es: Identificador del mantenedor + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 + help_text: + en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." + es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" + help_allow_html: True + form_group_id: maintainer + +# Maintainer email (O) +- field_name: maintainer_email + label: + en: Email of the dataset maintainer + es: Email del mantenedor + preset: schemingdcat_valid_email + display_property: vcard:hasEmail + form_placeholder: joseblanco@example.com + form_group_id: maintainer + +# Maintainer web (O) +- field_name: maintainer_url + label: + en: Website of the dataset maintainer + es: Web del mantenedor + display_property: foaf:homepage + form_placeholder: http://www.example.com + preset: valid_url + help_text: + en: This property refers to a web page that acts as the maintainer's homepage. URL + es: Esta propiedad se refiere a una página web que actúa como página principal del mantenedor. URL + form_group_id: maintainer + +# Author name (O) +- field_name: author + label: + en: Name of the dataset creator + es: Nombre del autor + display_property: dct:creator + form_placeholder: José Blanco + help_text: + en: "A party that creates or produces a particular dataset." + es: "Persona u organización creadora o productora de un conjunto de datos" + form_group_id: author + +# Author name (O). Fallback, CKAN using author in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: author_name + label: + en: Name of the dataset author + es: Nombre del mantenedor + validators: if_empty_same_as(author) unicode_safe + preset: hide_fallback + form_group_id: author + +# Author Identifier (O) +- field_name: author_uri + label: + en: Identifier of the dataset creator + es: Identificador del autor + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 + help_text: + en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." + es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" + help_allow_html: True + form_group_id: author + +# Author email (O) +- field_name: author_email + label: + en: Email of the dataset creator + es: Email del autor + preset: schemingdcat_valid_email + display_property: vcard:hasEmail + form_placeholder: joseblanco@example.com + form_group_id: author + +# Author web (O) +- field_name: author_url + label: + en: Website of the dataset creator + es: Web del autor + display_property: foaf:homepage + preset: valid_url + form_placeholder: http://www.example.com + help_text: + en: This property refers to a web page that acts as the author's homepage. URL + es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL + form_group_id: author + +# Other identifier (O)) +- field_name: alternate_identifier + label: + en: Other identifier + es: Identificador alternativo + display_property: adms:identifier + form_placeholder: doi:10.1234/example-dataset + help_text: + en: 'An alternate identifier in a particular context, can express other locally minted identifiers or external identifiers, like DOI, ELI, arΧiv for creative works and ORCID, VIAF, ISNI for actors such as authors and publishers, as long as the identifiers are globally unique and stable.' + es: 'Un identificador alternativo en un contexto particular, puede expresar otros identificadores acuñados localmente o identificadores externos, como DOI, ELI, arΧiv para obras creativas y ORCID, VIAF, ISNI para actores como autores y editores, siempre que los identificadores sean globalmente únicos y estables.' + help_allow_html: True + form_group_id: standards + +# Lineage statement (M) +- field_name: provenance + label: + en: Lineage statement + es: Declaración de linaje + preset: schemingdcat_fluent_markdown + display_property: dct:provenance + form_placeholder: + en: Means the history of a data set, and the life cycle from collection and acquisition through compilation and derivation to its current form, in accordance with EN ISO-19101. + es: Historia de un conjunto de datos y su ciclo de vida desde su recogida y adquisición hasta su compilación y derivación hasta su forma actual, con arreglo a la norma EN ISO-19101. + form_languages: ["es", "en"] + form_group_id: lineage + +# Conformity (M) +- field_name: conforms_to + label: + en: Conformity + es: Conformidad + required: False + display_property: dct:conformsTo + preset: multiple_text_links + form_placeholder: 'https://www.w3.org/TR/rdf-schema/' + help_text: + en: 'An established standard to which the described resource conforms.' + es: 'Norma establecida a la que se ajusta el recurso descrito.' + form_group_id: standards + +# Metadata standard (M) +- field_name: metadata_profile + label: + en: Metadata Standard + es: Perfil de Metadatos + required: False + display_property: dct:conformsTo + preset: multiple_metadata_profiles + form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/2.0.0' + help_text: + en: 'URI(s) of the Metadata profile used' + es: 'URI(s) del perfil de Metadatos utilizado' + form_group_id: standards + +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: standards + +# Temporal start (O) +- field_name: temporal_start + label: + en: Temporal extent (Start) + es: Cobertura temporal (Inicio) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: start + display_property: dct:temporal + preset: date_dependent_fields + form_group_id: temporal_info + +# Temporal end (O) +- field_name: temporal_end + label: + en: Temporal extent (End) + es: Cobertura temporal (Fin) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: end + display_property: dct:temporal + preset: date_dependent_fields + form_group_id: temporal_info + +# TO MIGRATE: Temporal coverage dict. Filling with temporal_* values +- field_name: temporal_coverage + label: + en: Temporal coverage + es: Cobertura temporal + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: start + legacy: temporal_start + label: + en: Temporal extent (Start) + es: Cobertura temporal (Inicio) + + - field_name: end + legacy: temporal_end + label: + en: Temporal extent (End) + es: Cobertura temporal (Fin) + + help_text: + en: The temporal period or periods the dataset covers. + es: Periodo o periodos temporales que abarca el conjunto de datos. + form_group_id: temporal_info + +# Update frequency (O) +- field_name: frequency + label: + en: Update frequency + es: Frecuencia de actualización + preset: select + display_property: dct:accrualPeriodicity + display_snippet: schemingdcat/display_snippets/link_schema.html + sorted_choices: True + choices: + - label: + en: Annual + es: Anual + value: http://publications.europa.eu/resource/authority/frequency/ANNUAL + - label: + en: Semiannual + es: Semestral + value: http://publications.europa.eu/resource/authority/frequency/ANNUAL_2 + - label: + en: Three times a year + es: Cuatrimestral + value: http://publications.europa.eu/resource/authority/frequency/ANNUAL_3 + - label: + en: Biennial + es: Bienal + value: http://publications.europa.eu/resource/authority/frequency/BIENNIAL + - label: + en: Bimonthly + es: Bimestral + value: http://publications.europa.eu/resource/authority/frequency/BIMONTHLY + - label: + en: Biweekly + es: Quincenal + value: http://publications.europa.eu/resource/authority/frequency/BIWEEKLY + - label: + en: Continuous + es: Continuo + value: http://publications.europa.eu/resource/authority/frequency/CONT + - label: + en: Daily + es: Diario + value: http://publications.europa.eu/resource/authority/frequency/DAILY + - label: + en: Twice a day + es: Dos veces al día + value: http://publications.europa.eu/resource/authority/frequency/DAILY_2 + - label: + en: Irregular + es: Irregular + value: http://publications.europa.eu/resource/authority/frequency/IRREG + - label: + en: Monthly + es: Mensual + value: http://publications.europa.eu/resource/authority/frequency/MONTHLY + - label: + en: Semimonthly + es: Bimensual + value: http://publications.europa.eu/resource/authority/frequency/MONTHLY_2 + - label: + en: Three times a month + es: Tres veces por mes + value: http://publications.europa.eu/resource/authority/frequency/MONTHLY_3 + - label: + en: Never + es: Nunca + value: http://publications.europa.eu/resource/authority/frequency/NEVER + - label: + en: Provisional data + es: Datos provisionales + value: http://publications.europa.eu/resource/authority/frequency/OP_DATPRO + - label: + en: Quarterly + es: Trimestral + value: http://publications.europa.eu/resource/authority/frequency/QUARTERLY + - label: + en: Triennial + es: Trienal + value: http://publications.europa.eu/resource/authority/frequency/TRIENNIAL + - label: + en: Unknown + es: Desconocida + value: http://publications.europa.eu/resource/authority/frequency/UNKNOWN + - label: + en: Continuously updated + es: Continuamente actualizado + value: http://publications.europa.eu/resource/authority/frequency/UPDATE_CONT + - label: + en: Semiweekly + es: Bisemanal + value: http://publications.europa.eu/resource/authority/frequency/WEEKLY_2 + - label: + en: Three times a week + es: Tres veces por semana + value: http://publications.europa.eu/resource/authority/frequency/WEEKLY_3 + - label: + en: Quinquennial + es: Cada cinco años + value: http://publications.europa.eu/resource/authority/frequency/QUINQUENNIAL + - label: + en: Decennial + es: Cada diez años + value: http://publications.europa.eu/resource/authority/frequency/DECENNIAL + - label: + en: Hourly + es: Cada hora + value: http://publications.europa.eu/resource/authority/frequency/HOURLY + - label: + en: Quadrennial + es: Cada cuatro años + value: http://publications.europa.eu/resource/authority/frequency/QUADRENNIAL + - label: + en: Bihourly + es: Cada dos horas + value: http://publications.europa.eu/resource/authority/frequency/BIHOURLY + - label: + en: Trihourly + es: Cada tres horas + value: http://publications.europa.eu/resource/authority/frequency/TRIHOURLY + - label: + en: Bidecennial + es: Cada veinte años + value: http://publications.europa.eu/resource/authority/frequency/BIDECENNIAL + - label: + en: Tridecennial + es: Cada treinta años + value: http://publications.europa.eu/resource/authority/frequency/TRIDECENNIAL + form_group_id: temporal_info + +# Source dataset (C) +- field_name: source + label: + en: Source dataset + es: Conjunto de datos de origen + display_property: dct:source + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://example.org/catalog/en/dataset/fc21c1a5-4c02-4157-9d2f-9a2cd200f908 + help_text: + en: This property refers to a related Dataset from which the described Dataset is derived. URI + es: Esta propiedad hace referencia a un conjunto de datos relacionado del que deriva el conjunto de datos descrito. URI + form_group_id: lineage + +# Related resources (O) +- field_name: reference + label: + en: Related sources + es: Recurso(s) relacionado(s) + preset: multiple_text_links + display_property: dcat:relation + form_placeholder: 'http://example.org/catalog/dataset/ejemplo' + help_text: + en: 'URI identifying the related resource. You can include as many properties as you know of references.' + es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' + form_group_id: lineage + +# Related resources (O) +- field_name: is_referenced_by + label: + en: Is referenced by + es: Es referenciado por + preset: multiple_text_links + display_property: dct:isReferencedBy + form_placeholder: 'http://example.org/catalog/dataset/ejemplo' + help_text: + en: 'A related resource, such as a publication, that references, cites, or otherwise points to the dataset.' + es: 'Un recurso relacionado, como una publicación, que referencia, cita o de otro modo apunta al conjunto de datos.' + form_group_id: lineage + +# Purpose (O) +- field_name: purpose + label: + en: Purpose + es: Propósito + form_placeholder: 'Gestión del Medio Ambiente.' + preset: schemingdcat_fluent_text + help_text: + en: 'Summary of the intentions for which the dataset was developed (ISO 19115).' + es: 'Resumen de las intenciones para las que se desarrolló el conjunto de datos (ISO 19115).' + form_languages: ["es", "en"] + form_group_id: purpose + +# Character encoding (C) +- field_name: encoding + label: + en: Character encoding + es: Codificación + display_property: cnt:characterEncoding + form_placeholder: UTF-8 + help_text: + en: 'Character encoding in ISO-19115 metadata is specified with a code list that can be mapped to the corresponding codes in [IANA-CHARSETS]' + es: 'La codificación de caracteres en los metadatos ISO-19115 se especifica con una lista de códigos que puede asignarse a los códigos correspondientes en [IANA-CHARSETS].' + help_allow_html: True + form_group_id: standards + +##TODO: temporal_resolution +## Add codelist or validator to check ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i +- field_name: temporal_resolution + label: + en: Temporal resolution + es: Resolución Temporal + help_text: + en: 'Minimum time period resolvable in the dataset,[ISO 8601].' + es: 'Período de tiempo mínimo resoluble en el conjunto de datos, ISO 8601., [ISO 8601].' + form_group_id: standards + + +# Coordinate Reference System (M) +- field_name: reference_system + label: + en: Coordinate Reference System + es: Sistema de Referencia de Coordenadas + validators: ignore_missing schemingdcat_valid_url + display_snippet: schemingdcat/display_snippets/link_epsg.html + form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 + help_text: + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + help_allow_html: True + form_group_id: spatial_info + +# Geographic bounding box (M) +- field_name: spatial + label: + en: Bounding Box + es: Extensión espacial + preset: spatial_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: bbox + - field_name: geom + - field_name: centroid + form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' + help_text: + en: 'If a Geographic identifier is selected and this element is empty, it will be filled in automatically.Draw BBox and copy GEOJSON with "coordinates" value.. e.g. {"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}
Only "geometry" dict with "type" and "coordinates" elements. More information at GeoJSON bounding boxes.' + es: 'Sí se selecciona un Identificador geográfico y este elemento esta vacío, se rellena automáticamente.

Dibuja el BBox y copia el GEOJSON con el valor de "coordinates". ej: {"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}
Solo es necesario el diccionario "geometry" con los elementos "type" y "coordinates". Más información en GeoJSON bounding boxes.' + help_allow_html: True + form_group_id: spatial_info + +# Geographic identifier (O) +- field_name: spatial_uri + label: + en: Geographic identifier + es: Identificador geográfico + preset: select_spatial_icon_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: uri + - field_name: text + display_property: dcat:theme + select_size: 10 + sorted_choices: False + choices: + - label: + ca: España + en: Spain + es: España + eu: España + gl: España + spatial: '{"type": "Polygon", "coordinates": [[[-18.16, 27.64], [4.32, 27.64], + [4.32, 43.79], [-18.16, 43.79], [-18.16, 27.64]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Pais/España + - label: + ca: Andalucía + en: Andalucía + es: Andalucía + eu: Andalucía + gl: Andalucía + spatial: '{"type": "Polygon", "coordinates": [[[-7.52, 35.94], [-1.63, 35.94], + [-1.63, 38.73], [-7.52, 38.73], [-7.52, 35.94]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Andalucia + - label: + ca: Almería + en: Almería + es: Almería + eu: Almería + gl: Almería + spatial: '{"type": "Polygon", "coordinates": [[[-3.14, 35.94], [-1.63, 35.94], + [-1.63, 37.92], [-3.14, 37.92], [-3.14, 35.94]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Almeria + - label: + ca: Cádiz + en: Cádiz + es: Cádiz + eu: Cádiz + gl: Cádiz + spatial: '{"type": "Polygon", "coordinates": [[[-6.47, 36.0], [-5.09, 36.0], [-5.09, + 37.05], [-6.47, 37.05], [-6.47, 36.0]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Cadiz + - label: + ca: Córdoba + en: Córdoba + es: Córdoba + eu: Córdoba + gl: Córdoba + spatial: '{"type": "Polygon", "coordinates": [[[-5.59, 37.18], [-4.0, 37.18], + [-4.0, 38.73], [-5.59, 38.73], [-5.59, 37.18]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Cordoba + - label: + ca: Granada + en: Granada + es: Granada + eu: Granada + gl: Granada + spatial: '{"type": "Polygon", "coordinates": [[[-4.33, 36.69], [-2.21, 36.69], + [-2.21, 38.08], [-4.33, 38.08], [-4.33, 36.69]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Granada + - label: + ca: Huelva + en: Huelva + es: Huelva + eu: Huelva + gl: Huelva + spatial: '{"type": "Polygon", "coordinates": [[[-7.52, 36.8], [-6.12, 36.8], [-6.12, + 38.21], [-7.52, 38.21], [-7.52, 36.8]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Huelva + - label: + ca: Jaén + en: Jaén + es: Jaén + eu: Jaén + gl: Jaén + spatial: '{"type": "Polygon", "coordinates": [[[-4.29, 37.38], [-2.44, 37.38], + [-2.44, 38.53], [-4.29, 38.53], [-4.29, 37.38]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Jaen + - label: + ca: Málaga + en: Málaga + es: Málaga + eu: Málaga + gl: Málaga + spatial: '{"type": "Polygon", "coordinates": [[[-5.61, 36.31], [-3.77, 36.31], + [-3.77, 37.28], [-5.61, 37.28], [-5.61, 36.31]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Malaga + - label: + ca: Sevilla + en: Sevilla + es: Sevilla + eu: Sevilla + gl: Sevilla + spatial: '{"type": "Polygon", "coordinates": [[[-6.54, 36.84], [-4.65, 36.84], + [-4.65, 38.2], [-6.54, 38.2], [-6.54, 36.84]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Sevilla + - label: + ca: Aragón + en: Aragón + es: Aragón + eu: Aragón + gl: Aragón + spatial: '{"type": "Polygon", "coordinates": [[[-2.17, 39.85], [0.77, 39.85], + [0.77, 42.92], [-2.17, 42.92], [-2.17, 39.85]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Aragon + - label: + ca: Huesca + en: Huesca + es: Huesca + eu: Huesca + gl: Huesca + spatial: '{"type": "Polygon", "coordinates": [[[-0.93, 41.35], [0.77, 41.35], + [0.77, 42.92], [-0.93, 42.92], [-0.93, 41.35]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Huesca + - label: + ca: Teruel + en: Teruel + es: Teruel + eu: Teruel + gl: Teruel + spatial: '{"type": "Polygon", "coordinates": [[[-1.81, 39.85], [0.29, 39.85], + [0.29, 41.35], [-1.81, 41.35], [-1.81, 39.85]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Teruel + - label: + ca: Zaragoza + en: Zaragoza + es: Zaragoza + eu: Zaragoza + gl: Zaragoza + spatial: '{"type": "Polygon", "coordinates": [[[-2.17, 40.94], [0.39, 40.94], + [0.39, 42.74], [-2.17, 42.74], [-2.17, 40.94]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Zaragoza + - label: + ca: Principado de Asturias + en: Principado de Asturias + es: Principado de Asturias + eu: Principado de Asturias + gl: Principado de Asturias + spatial: '{"type": "Polygon", "coordinates": [[[-7.18, 42.88], [-4.51, 42.88], + [-4.51, 43.66], [-7.18, 43.66], [-7.18, 42.88]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Principado-Asturias + - label: + ca: Asturias + en: Asturias + es: Asturias + eu: Asturias + gl: Asturias + spatial: '{"type": "Polygon", "coordinates": [[[-7.18, 42.88], [-4.51, 42.88], + [-4.51, 43.66], [-7.18, 43.66], [-7.18, 42.88]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Asturias + - label: + ca: Illes Balears + en: Illes Balears + es: Illes Balears + eu: Illes Balears + gl: Illes Balears + spatial: '{"type": "Polygon", "coordinates": [[[1.16, 38.64], [4.32, 38.64], [4.32, + 40.1], [1.16, 40.1], [1.16, 38.64]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Illes-Balears + - label: + ca: Provincia de Illes Balears + en: Provincia de Illes Balears + es: Provincia de Illes Balears + eu: Provincia de Illes Balears + gl: Provincia de Illes Balears + spatial: '{"type": "Polygon", "coordinates": [[[1.16, 38.64], [4.32, 38.64], [4.32, + 40.1], [1.16, 40.1], [1.16, 38.64]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Illes-Balears + - label: + ca: Canarias + en: Canarias + es: Canarias + eu: Canarias + gl: Canarias + spatial: '{"type": "Polygon", "coordinates": [[[-18.16, 27.64], [-13.42, 27.64], + [-13.42, 29.42], [-18.16, 29.42], [-18.16, 27.64]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Canarias + - label: + ca: Las Palmas + en: Las Palmas + es: Las Palmas + eu: Las Palmas + gl: Las Palmas + spatial: '{"type": "Polygon", "coordinates": [[[-15.83, 27.73], [-15.36, 27.73], [-15.36, 28.18], [-15.83, 28.18], [-15.83, 27.73]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Las-Palmas + - label: + ca: Santa Cruz de Tenerife + en: Santa Cruz de Tenerife + es: Santa Cruz de Tenerife + eu: Santa Cruz de Tenerife + gl: Santa Cruz de Tenerife + spatial: '{"type": "Polygon", "coordinates": [[[-16.92, 28.0], [-16.12, 28.0], [-16.12, 28.6], [-16.92, 28.6], [-16.92, 28.0]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Santa-Cruz-Tenerife + - label: + ca: Cantabria + en: Cantabria + es: Cantabria + eu: Cantabria + gl: Cantabria + spatial: '{"type": "Polygon", "coordinates": [[[-4.85, 42.76], [-3.15, 42.76], + [-3.15, 43.51], [-4.85, 43.51], [-4.85, 42.76]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Cantabria + - label: + ca: Provincia de Cantabria + en: Provincia de Cantabria + es: Provincia de Cantabria + eu: Provincia de Cantabria + gl: Provincia de Cantabria + spatial: '{"type": "Polygon", "coordinates": [[[-4.85, 42.76], [-3.15, 42.76], + [-3.15, 43.51], [-4.85, 43.51], [-4.85, 42.76]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Cantabria + - label: + ca: Castilla y León + en: Castilla y León + es: Castilla y León + eu: Castilla y León + gl: Castilla y León + spatial: '{"type": "Polygon", "coordinates": [[[-7.08, 40.08], [-1.78, 40.08], + [-1.78, 43.24], [-7.08, 43.24], [-7.08, 40.08]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Castilla-Leon + - label: + ca: Ávila + en: Ávila + es: Ávila + eu: Ávila + gl: Ávila + spatial: '{"type": "Polygon", "coordinates": [[[-5.74, 40.08], [-4.16, 40.08], + [-4.16, 41.16], [-5.74, 41.16], [-5.74, 40.08]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Avila + - label: + ca: Burgos + en: Burgos + es: Burgos + eu: Burgos + gl: Burgos + spatial: '{"type": "Polygon", "coordinates": [[[-4.33, 41.45], [-2.52, 41.45], + [-2.52, 43.2], [-4.33, 43.2], [-4.33, 41.45]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Burgos + - label: + ca: León + en: León + es: León + eu: León + gl: León + spatial: '{"type": "Polygon", "coordinates": [[[-7.08, 42.03], [-4.74, 42.03], + [-4.74, 43.24], [-7.08, 43.24], [-7.08, 42.03]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Leon + - label: + ca: Palencia + en: Palencia + es: Palencia + eu: Palencia + gl: Palencia + spatial: '{"type": "Polygon", "coordinates": [[[-5.03, 41.76], [-3.89, 41.76], + [-3.89, 43.06], [-5.03, 43.06], [-5.03, 41.76]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Palencia + - label: + ca: Salamanca + en: Salamanca + es: Salamanca + eu: Salamanca + gl: Salamanca + spatial: '{"type": "Polygon", "coordinates": [[[-6.93, 40.24], [-5.09, 40.24], + [-5.09, 41.29], [-6.93, 41.29], [-6.93, 40.24]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Salamanca + - label: + ca: Segovia + en: Segovia + es: Segovia + eu: Segovia + gl: Segovia + spatial: '{"type": "Polygon", "coordinates": [[[-4.72, 40.63], [-3.21, 40.63], + [-3.21, 41.59], [-4.72, 41.59], [-4.72, 40.63]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Segovia + - label: + ca: Soria + en: Soria + es: Soria + eu: Soria + gl: Soria + spatial: '{"type": "Polygon", "coordinates": [[[-3.55, 41.06], [-1.78, 41.06], + [-1.78, 42.15], [-3.55, 42.15], [-3.55, 41.06]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Soria + - label: + ca: Valladolid + en: Valladolid + es: Valladolid + eu: Valladolid + gl: Valladolid + spatial: '{"type": "Polygon", "coordinates": [[[-5.52, 41.09], [-3.98, 41.09], + [-3.98, 42.31], [-5.52, 42.31], [-5.52, 41.09]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Valladolid + - label: + ca: Zamora + en: Zamora + es: Zamora + eu: Zamora + gl: Zamora + spatial: '{"type": "Polygon", "coordinates": [[[-7.03, 41.12], [-5.23, 41.12], + [-5.23, 42.25], [-7.03, 42.25], [-7.03, 41.12]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Zamora + - label: + ca: Castilla-La Mancha + en: Castilla-La Mancha + es: Castilla-La Mancha + eu: Castilla-La Mancha + gl: Castilla-La Mancha + spatial: '{"type": "Polygon", "coordinates": [[[-5.41, 38.02], [-0.92, 38.02], + [-0.92, 41.33], [-5.41, 41.33], [-5.41, 38.02]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Castilla-La-Mancha + - label: + ca: Albacete + en: Albacete + es: Albacete + eu: Albacete + gl: Albacete + spatial: '{"type": "Polygon", "coordinates": [[[-2.88, 38.02], [-0.92, 38.02], + [-0.92, 39.42], [-2.88, 39.42], [-2.88, 38.02]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Albacete + - label: + ca: Ciudad Real + en: Ciudad Real + es: Ciudad Real + eu: Ciudad Real + gl: Ciudad Real + spatial: '{"type": "Polygon", "coordinates": [[[-5.05, 38.34], [-2.64, 38.34], + [-2.64, 39.58], [-5.05, 39.58], [-5.05, 38.34]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Ciudad-Real + - label: + ca: Cuenca + en: Cuenca + es: Cuenca + eu: Cuenca + gl: Cuenca + spatial: '{"type": "Polygon", "coordinates": [[[-3.17, 39.23], [-1.14, 39.23], + [-1.14, 40.66], [-3.17, 40.66], [-3.17, 39.23]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Cuenca + - label: + ca: Guadalajara + en: Guadalajara + es: Guadalajara + eu: Guadalajara + gl: Guadalajara + spatial: '{"type": "Polygon", "coordinates": [[[-3.54, 40.15], [-1.54, 40.15], + [-1.54, 41.33], [-3.54, 41.33], [-3.54, 40.15]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Guadalajara + - label: + ca: Toledo + en: Toledo + es: Toledo + eu: Toledo + gl: Toledo + spatial: '{"type": "Polygon", "coordinates": [[[-5.41, 39.26], [-2.91, 39.26], + [-2.91, 40.32], [-5.41, 40.32], [-5.41, 39.26]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Toledo + - label: + ca: Cataluña + en: Cataluña + es: Cataluña + eu: Cataluña + gl: Cataluña + spatial: '{"type": "Polygon", "coordinates": [[[0.17, 40.52], [3.32, 40.52], [3.32, + 42.86], [0.17, 42.86], [0.17, 40.52]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Cataluna + - label: + ca: Barcelona + en: Barcelona + es: Barcelona + eu: Barcelona + gl: Barcelona + spatial: '{"type": "Polygon", "coordinates": [[[1.36, 41.2], [2.78, 41.2], [2.78, + 42.32], [1.36, 42.32], [1.36, 41.2]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Barcelona + - label: + ca: Girona + en: Girona + es: Girona + eu: Girona + gl: Girona + spatial: '{"type": "Polygon", "coordinates": [[[1.72, 41.65], [3.32, 41.65], [3.32, + 42.5], [1.72, 42.5], [1.72, 41.65]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Girona + - label: + ca: Lleida + en: Lleida + es: Lleida + eu: Lleida + gl: Lleida + spatial: '{"type": "Polygon", "coordinates": [[[0.32, 41.27], [1.86, 41.27], [1.86, + 42.86], [0.32, 42.86], [0.32, 41.27]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Lleida + - label: + ca: Tarragona + en: Tarragona + es: Tarragona + eu: Tarragona + gl: Tarragona + spatial: '{"type": "Polygon", "coordinates": [[[0.17, 40.52], [1.65, 40.52], [1.65, + 41.58], [0.17, 41.58], [0.17, 40.52]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Tarragona + - label: + ca: Comunitat Valenciana + en: Comunitat Valenciana + es: Comunitat Valenciana + eu: Comunitat Valenciana + gl: Comunitat Valenciana + spatial: '{"type": "Polygon", "coordinates": [[[-1.53, 37.84], [0.69, 37.84], + [0.69, 40.79], [-1.53, 40.79], [-1.53, 37.84]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Comunitat-Valenciana + - label: + ca: Alicante + en: Alicante + es: Alicante + eu: Alicante + gl: Alicante + spatial: '{"type": "Polygon", "coordinates": [[[-1.09, 37.84], [0.23, 37.84], [0.23, 38.89], [-1.09, 38.89], [-1.09, 37.84]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Alicante + - label: + ca: Castellón + en: Castellón + es: Castellón + eu: Castellón + gl: Castellón + spatial: '{"type": "Polygon", "coordinates": [[[-0.85, 39.72], [0.69, 39.72], [0.69, 40.79], [-0.85, 40.79], [-0.85, 39.72]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Castellon + - label: + ca: Valencia + en: Valencia + es: Valencia + eu: Valencia + gl: Valencia + spatial: '{"type": "Polygon", "coordinates": [[[-1.53, 38.69], [-0.03, 38.69], [-0.03, 40.21], [-1.53, 40.21], [-1.53, 38.69]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Valencia + - label: + ca: Extremadura + en: Extremadura + es: Extremadura + eu: Extremadura + gl: Extremadura + spatial: '{"type": "Polygon", "coordinates": [[[-7.55, 37.94], [-4.65, 37.94], + [-4.65, 40.49], [-7.55, 40.49], [-7.55, 37.94]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Extremadura + - label: + ca: Badajoz + en: Badajoz + es: Badajoz + eu: Badajoz + gl: Badajoz + spatial: '{"type": "Polygon", "coordinates": [[[-7.34, 37.94], [-4.65, 37.94], + [-4.65, 39.45], [-7.34, 39.45], [-7.34, 37.94]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Badajoz + - label: + ca: Cáceres + en: Cáceres + es: Cáceres + eu: Cáceres + gl: Cáceres + spatial: '{"type": "Polygon", "coordinates": [[[-7.55, 39.03], [-4.95, 39.03], + [-4.95, 40.49], [-7.55, 40.49], [-7.55, 39.03]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Caceres + - label: + ca: Galicia + en: Galicia + es: Galicia + eu: Galicia + gl: Galicia + spatial: '{"type": "Polygon", "coordinates": [[[-9.3, 41.81], [-6.73, 41.81], + [-6.73, 43.79], [-9.3, 43.79], [-9.3, 41.81]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Galicia + - label: + ca: A Coruña + en: A Coruña + es: A Coruña + eu: A Coruña + gl: A Coruña + spatial: '{"type": "Polygon", "coordinates": [[[-9.3, 42.46], [-7.66, 42.46], + [-7.66, 43.79], [-9.3, 43.79], [-9.3, 42.46]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/A-Coruna + - label: + ca: Lugo + en: Lugo + es: Lugo + eu: Lugo + gl: Lugo + spatial: '{"type": "Polygon", "coordinates": [[[-8.0, 42.33], [-6.82, 42.33], + [-6.82, 43.76], [-8.0, 43.76], [-8.0, 42.33]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Lugo + - label: + ca: Ourense + en: Ourense + es: Ourense + eu: Ourense + gl: Ourense + spatial: '{"type": "Polygon", "coordinates": [[[-8.37, 41.81], [-6.73, 41.81], + [-6.73, 42.58], [-8.37, 42.58], [-8.37, 41.81]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Ourense + - label: + ca: Pontevedra + en: Pontevedra + es: Pontevedra + eu: Pontevedra + gl: Pontevedra + spatial: '{"type": "Polygon", "coordinates": [[[-8.95, 41.87], [-7.86, 41.87], + [-7.86, 42.86], [-8.95, 42.86], [-8.95, 41.87]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Pontevedra + - label: + ca: Comunidad de Madrid + en: Comunidad de Madrid + es: Comunidad de Madrid + eu: Comunidad de Madrid + gl: Comunidad de Madrid + spatial: '{"type": "Polygon", "coordinates": [[[-4.58, 39.88], [-3.05, 39.88], + [-3.05, 41.17], [-4.58, 41.17], [-4.58, 39.88]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Comunidad-Madrid + - label: + ca: Madrid + en: Madrid + es: Madrid + eu: Madrid + gl: Madrid + spatial: '{"type": "Polygon", "coordinates": [[[-4.58, 39.88], [-3.05, 39.88], + [-3.05, 41.17], [-4.58, 41.17], [-4.58, 39.88]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Madrid + - label: + ca: Región de Murcia + en: Región de Murcia + es: Región de Murcia + eu: Región de Murcia + gl: Región de Murcia + spatial: '{"type": "Polygon", "coordinates": [[[-2.34, 37.38], [-0.69, 37.38], + [-0.69, 38.76], [-2.34, 38.76], [-2.34, 37.38]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Region-Murcia + - label: + ca: Murcia + en: Murcia + es: Murcia + eu: Murcia + gl: Murcia + spatial: '{"type": "Polygon", "coordinates": [[[-2.34, 37.38], [-0.69, 37.38], + [-0.69, 38.76], [-2.34, 38.76], [-2.34, 37.38]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Murcia + - label: + ca: C. Foral de Navarra + en: C. Foral de Navarra + es: C. Foral de Navarra + eu: C. Foral de Navarra + gl: C. Foral de Navarra + spatial: '{"type": "Polygon", "coordinates": [[[-2.5, 41.91], [-0.72, 41.91], + [-0.72, 43.31], [-2.5, 43.31], [-2.5, 41.91]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Comunidad-Foral-Navarra + - label: + ca: Navarra + en: Navarra + es: Navarra + eu: Navarra + gl: Navarra + spatial: '{"type": "Polygon", "coordinates": [[[-2.5, 41.91], [-0.72, 41.91], + [-0.72, 43.31], [-2.5, 43.31], [-2.5, 41.91]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Navarra + - label: + ca: País Vasco + en: País Vasco + es: País Vasco + eu: País Vasco + gl: País Vasco + spatial: '{"type": "Polygon", "coordinates": [[[-3.45, 42.47], [-1.73, 42.47], + [-1.73, 43.46], [-3.45, 43.46], [-3.45, 42.47]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Pais-Vasco + - label: + ca: Álava + en: Álava + es: Álava + eu: Álava + gl: Álava + spatial: '{"type": "Polygon", "coordinates": [[[-3.29, 42.47], [-2.23, 42.47], [-2.23, 43.22], [-3.29, 43.22], [-3.29, 42.47]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Alava + - label: + ca: Guipúzcoa + en: Guipúzcoa + es: Guipúzcoa + eu: Guipúzcoa + gl: Guipúzcoa + spatial: '{"type": "Polygon", "coordinates": [[[-2.6, 42.9], [-1.73, 42.9], [-1.73, 43.39], [-2.6, 43.39], [-2.6, 42.9]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Guipuzcoa + - label: + ca: Vizcaya + en: Vizcaya + es: Vizcaya + eu: Vizcaya + gl: Vizcaya + spatial: '{"type": "Polygon", "coordinates": [[[-3.45, 42.98], [-2.41, 42.98], [-2.41, 43.46], [-3.45, 43.46], [-3.45, 42.98]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Vizcaya + - label: + ca: La Rioja + en: La Rioja + es: La Rioja + eu: La Rioja + gl: La Rioja + spatial: '{"type": "Polygon", "coordinates": [[[-3.13, 41.92], [-1.68, 41.92], + [-1.68, 42.64], [-3.13, 42.64], [-3.13, 41.92]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/La-Rioja + - label: + ca: Provincia de La Rioja + en: Provincia de La Rioja + es: Provincia de La Rioja + eu: Provincia de La Rioja + gl: Provincia de La Rioja + spatial: '{"type": "Polygon", "coordinates": [[[-3.13, 41.92], [-1.68, 41.92], + [-1.68, 42.64], [-3.13, 42.64], [-3.13, 41.92]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/La-Rioja + - label: + ca: Ceuta + en: Ceuta + es: Ceuta + eu: Ceuta + gl: Ceuta + spatial: '{"type": "Polygon", "coordinates": [[[-5.42, 35.87], [-5.28, 35.87], + [-5.28, 35.92], [-5.42, 35.92], [-5.42, 35.87]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Ceuta + - label: + ca: Provincia de Ceuta + en: Provincia de Ceuta + es: Provincia de Ceuta + eu: Provincia de Ceuta + gl: Provincia de Ceuta + spatial: '{"type": "Polygon", "coordinates": [[[-5.42, 35.87], [-5.28, 35.87], + [-5.28, 35.92], [-5.42, 35.92], [-5.42, 35.87]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Ceuta + - label: + ca: Melilla + en: Melilla + es: Melilla + eu: Melilla + gl: Melilla + spatial: '{"type": "Polygon", "coordinates": [[[-3.89, 35.18], [-2.42, 35.18], + [-2.42, 35.32], [-3.89, 35.32], [-3.89, 35.18]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Autonomia/Melilla + - label: + ca: Provincia de Melilla + en: Provincia de Melilla + es: Provincia de Melilla + eu: Provincia de Melilla + gl: Provincia de Melilla + spatial: '{"type": "Polygon", "coordinates": [[[-3.89, 35.18], [-2.42, 35.18], + [-2.42, 35.32], [-3.89, 35.32], [-3.89, 35.18]]]}' + value: http://datos.gob.es/recurso/sector-publico/territorio/Provincia/Melilla + help_text: + en: 'Geographic coverage of the dataset. More information in NTI-RISP Annex V.' + es: 'Ámbito geográfico cubierto por el conjunto de datos. Más información en el Anexo V de NTI-RISP.' + help_allow_html: True + form_group_id: spatial_info + +# TO MIGRATE: Geographic bounding box dict. Filling with spatial_* values +- field_name: spatial_coverage + label: + en: Spatial coverage + es: Cobertura espacial + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: spatial_uri + label: + en: URI + es: URI + + - field_name: text + legacy: spatial_uri + label: + en: Label + es: Etiqueta + form_placeholder: 'España' + + - field_name: geom + legacy: spatial_geom + label: + en: Geometry + es: Geometría + form_placeholder: '{"type": "Polygon", "coordinates": [[[11.9936, 54.0486], [11.9936, 54.2466], [12.3045, 54.2466], [12.3045, 54.0486], [11.9936, 54.0486]]]}' + validators: schemingdcat_valid_json_object + + - field_name: bbox + legacy: spatial + label: + en: Bounding Box + es: Extensión espacial + form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' + validators: schemingdcat_valid_json_object + + - field_name: centroid + legacy: spatial_centroid + label: + en: Centroid + es: Centroide + form_placeholder: '{"type": "Point", "coordinates": [1.5, 1.5]}' + validators: schemingdcat_valid_json_object + + help_text: + en: 'A geographic region that is covered by the dataset.' + es: 'Región geográfica que abarca el conjunto de datos.' + form_group_id: spatial_info + + +# Spatial representation type (O) +- field_name: representation_type + label: + en: Spatial representation Type + es: Tipo de representación espacial + preset: select + display_property: adms:representationTechnique + display_snippet: schemingdcat/display_snippets/link_schema.html + help_text: + en: 'Spatial representation type (INSPIRE)' + es: 'Tipos de representación espacial (INSPIRE)' + help_allow_html: True + sorted_choices: True + choices: + - label: + en: Grid + es: Rejilla + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/grid + - label: + en: Stereo model + es: Modelo estéreo + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/stereoModel + - label: + en: Text table + es: Tabla de texto + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/textTable + - label: + en: TIN + es: TIN + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/tin + - label: + en: Vector + es: Vector + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/vector + - label: + en: Video + es: Vídeo + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/video + form_group_id: spatial_info + +# Spatial resolution (C) +- field_name: spatial_resolution_in_meters + label: + en: Spatial resolution of the dataset (m) + es: Resolución espacial del dataset (m) + display_property: dcat:spatialResolutionInMeters + form_placeholder: '5000' + help_text: + en: Specify spatial resolution as distance in metres. + es: Especifique la resolución espacial como distancia en metros + form_group_id: spatial_info + +# License URI (M) +- field_name: license_id + label: + en: License + es: Licencia + form_snippet: license.html + display_property: dct:license + help_text: + en: 'License definitions and additional information can be found at: Open Definition' + es: 'Las definiciones de las licencias y la información adicional pueden encontrarse en: Open Definition' + help_allow_html: True + form_group_id: license_info + +# Conditions for access and use and limitations on public access (M) +- field_name: access_rights + label: + en: Access Rights + es: Derechos de acceso + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: dct:accessRights + form_include_blank_choice: False + choices: + - label: + en: Confidential + es: Confidencial + value: http://publications.europa.eu/resource/authority/access-right/CONFIDENTIAL + - label: + en: Non-public + es: No público + value: http://publications.europa.eu/resource/authority/access-right/NON_PUBLIC + - label: + en: Normal + es: Normal + value: http://publications.europa.eu/resource/authority/access-right/NORMAL + - label: + en: Public + es: Público + value: http://publications.europa.eu/resource/authority/access-right/PUBLIC + - label: + en: Restricted + es: Restringido + value: http://publications.europa.eu/resource/authority/access-right/RESTRICTED + - label: + en: Sensitive + es: Sensible + value: http://publications.europa.eu/resource/authority/access-right/SENSITIVE + help_text: + en: 'Name authority list Access right (EU Vocabs)' + es: 'Lista de autoridades Derechos de acceso (EU Vocabs)' + help_allow_html: True + form_group_id: license_info + +# Version number (O) +- field_name: version + label: + en: Version + es: Versión + help_text: + en: Version number or other version designation of the Dataset. + es: Número de versión u otra designación de versión del conjunto de datos. + display_property: owl:versionInfo + validators: ignore_missing unicode_safe package_version_validator + form_placeholder: '1.0' + form_group_id: version_notes + +# Version information (O) +- field_name: version_notes + label: + en: Version notes + es: Notas sobre la versión + help_text: + en: A description of the differences between this version and a previous version of the Dataset. + es: Una descripción de las diferencias entre esta versión y una versión anterior del Dataset. + preset: schemingdcat_fluent_markdown + display_property: adms:versionNotes + form_placeholder: + en: e.g. Some useful version notes about the dataset. + es: ej. Una descripción útil sobre las diferencias de esta versión del conjunto de datos. + form_languages: ["es", "en"] + form_group_id: version_notes + +# Dataset validity (O) +- field_name: valid + label: + en: Dataset validity + es: Vigencia del conjunto de datos + display_property: dct:valid + preset: date + form_group_id: version_notes + +#--Resource/Distribution (dcat:Distribution) fields--# +resource_fields: + +# Access URL (M) +- field_name: url + label: + en: URL + es: URL + preset: resource_url_upload + display_snippet: schemingdcat/display_snippets/link.html + form_group_id: resource_url + +# Access URL (M). Hide, falls back to the standard resource url field +- field_name: access_url + label: + en: Access URL + es: URL de acceso + validators: if_empty_same_as(url) unicode_safe + form_snippet: null + display_property: dcat:accessURL + display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that gives access to the dataset (defaults to the standard resource URL).' + es: 'URL que da acceso al conjunto de datos (por defecto es la URL de recursos estándar).' + form_group_id: resource_url + +# Access URL (M). Falls back to the standard resource url field +- field_name: download_url + label: + en: Download URL + es: URL de descarga + validators: if_empty_same_as(url) unicode_safe + display_property: dcat:downloadURL + display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that provides a direct link to a downloadable file (defaults to the standard resource URL).' + es: 'URL que proporciona un enlace directo a un archivo descargable (por defecto es la URL de recursos estándar).' + form_group_id: resource_url + +# Access services (O). Dictionariy. +- field_name: access_services + label: + en: Access services + es: Servicios de acceso + repeating_label: + en: Access service + es: Servicio de acceso + display_property: dcat:downloadURL + repeating_subfields: + - field_name: uri + label: + en: Access service URI + es: URI del servicio de acceso + display_snippet: schemingdcat/display_snippets/link_schema.html + - field_name: title + label: + en: Access service title + es: Título del servicio de acceso + - field_name: endpoint_description + label: + en: Endpoint description + es: Descripción del punto final + - field_name: endpoint_url + label: + en: Endpoint URL + es: URL del punto final + preset: multiple_text_links + - field_name: serves_dataset + label: + en: Serves dataset + es: Sirve los conjuntos de datos + preset: multiple_text_links + help_text: + en: 'A data service that gives access to the resource.' + es: 'Un servicio de datos que da acceso al recurso.' + form_group_id: resource_access_service + +#FIX: Resource title (M) -- name_translated field dont work +- field_name: name + label: + en: Distribution title + es: Título de la distribución + form_placeholder: + en: e.g. Web Map Service + es: ej. Web Map Service + display_property: dct:title + form_group_id: resource_title + +#FIX: Resource abstract (M) -- description_translated field dont work +- field_name: description + label: + en: Distribution abstract + es: Descripción de la distribución + form_snippet: markdown.html + form_placeholder: + en: Some useful notes about the data. + es: Algunas notas útiles sobre los datos. + display_property: dct:description + form_group_id: resource_notes + +# Date of creation (M) +- field_name: created + label: + en: Date of creation + es: Fecha de creación + display_property: dct:created + preset: date_created + form_group_id: resource_identification + +# Date of last revision (M) +- field_name: modified + label: + en: Date of last revision + es: Fecha de última modificación + display_property: dct:modified + preset: date_modified + form_group_id: resource_identification + +# Resource character encoding (C) +- field_name: hash + label: + en: Hash + es: Hash + display_property: spdx:checksumValue + form_placeholder: 4304cf2e751e6053c90b1804c89c0ebb758f395a + help_text: + en: 'Checksum of the downloaded file.' + es: 'Suma de comprobación del fichero descargado.' + form_group_id: resource_identification + +# Resource character encoding (C) +- field_name: hash_algorithm + label: + en: Hash Algorithm + es: Algoritmo Hash + display_property: spdx:Checksum + form_placeholder: http://spdx.org/rdf/terms#checksumAlgorithm_sha1 + help_text: + en: 'Algorithm used to calculate to checksum.' + es: 'Algoritmo utilizado para calcular la suma de comprobación.' + form_group_id: resource_identification + +# Resource status (O) +- field_name: availability + label: + en: Resource availability + es: Disponibilidad de la distribución + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: dcatap:availability + form_include_blank_choice: False + choices: + - label: + en: Available + es: Disponible + value: http://publications.europa.eu/resource/authority/planned-availability/AVAILABLE + - label: + en: Stable + es: Estable + value: http://publications.europa.eu/resource/authority/planned-availability/STABLE + - label: + en: Experimental + es: Experimental + value: http://publications.europa.eu/resource/authority/planned-availability/EXPERIMENTAL + - label: + en: Provisional data + es: Datos provisionales + value: http://publications.europa.eu/resource/authority/planned-availability/OP_DATPRO + - label: + en: Temporary + es: Temporal + value: http://publications.europa.eu/resource/authority/planned-availability/TEMPORARY + help_text: + en: 'This property indicates how long it is planned to keep the Distribution of the Dataset available acording to Distribution availability vocabulary.' + es: 'Esta propiedad indica durante cuánto tiempo se prevé mantener disponible la distribución del conjunto de datos de acuerdo con el Vocabulario de disponibilidad de la distribución.' + help_allow_html: True + form_group_id: resource_lineage + +# Resource format (O) +- field_name: format + label: + en: Format + es: Formato + preset: resource_format_autocomplete + display_property: dct:format + form_group_id: resource_distribution + +# Media type (O) +- field_name: mimetype + label: + en: Media type + es: Tipo de medio + display_snippet: schemingdcat/display_snippets/link.html + display_property: dct:MediaType + form_placeholder: http://www.iana.org/assignments/media-types/application/vnd.shp + help_text: + en: 'This property refers to the media type of the Distribution as defined in the official register of media types (IANA)' + es: 'Esta propiedad se refiere al tipo de medio de la Distribución tal y como se define en el registro oficial de tipos de medios (IANA)' + help_allow_html: True + form_group_id: resource_distribution + +# Compress format (O) +- field_name: compress_format + label: + en: Compress format + es: Formato comprimido + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:compressFormat + form_placeholder: http://www.iana.org/assignments/media-types/application/gzip + help_text: + en: 'The format of the file in which the data is contained in a compressed form.' + es: 'Formato del archivo en el que los datos están contenidos de forma comprimida.' + form_group_id: resource_distribution + +# Package format (O) +- field_name: package_format + label: + en: Package format + es: Formato del paquete + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:packageFormat + form_placeholder: http://publications.europa.eu/resource/authority/file-type/TAR + help_text: + en: 'The format of the file in which one or more data files are grouped together.' + es: 'Formato del fichero en el que se agrupan uno o varios ficheros de datos.' + form_group_id: resource_distribution + +# Resource status (O) +- field_name: status + label: + en: Resource status + es: Estado de la distribución + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: adms:status + form_include_blank_choice: False + choices: + - label: + en: Completed + es: Completado + value: http://purl.org/adms/status/Completed + - label: + en: Under development + es: En desarrollo + value: http://purl.org/adms/status/UnderDevelopment + - label: + en: Deprecated + es: Obsoleto + value: http://purl.org/adms/status/Deprecated + - label: + en: Withdrawn + es: Retirado + value: http://purl.org/adms/status/Withdrawn + help_text: + en: 'This property refers to the maturity of the Distribution. It MUST take one of the values from the ADMS status list.' + es: 'Esta propiedad hace referencia a la madurez de la distribución y debe tomar uno de los valores de la lista ADMS status.' + help_allow_html: True + form_group_id: resource_type + +# Resource character encoding (C) +- field_name: encoding + label: + en: Character encoding + es: Codificación + display_property: cnt:characterEncoding + form_placeholder: UTF-8 + help_text: + en: 'Character encoding in ISO-19115 metadata is specified with a code list that can be mapped to the corresponding codes in [IANA-CHARSETS]' + es: 'La codificación de caracteres en los metadatos ISO-19115 se especifica con una lista de códigos que puede asignarse a los códigos correspondientes en [IANA-CHARSETS].' + help_allow_html: True + form_group_id: resource_type + +# Byte size (O) +- field_name: size + label: + en: Byte size + es: Tamaño en bytes + form_placeholder: 305000 + preset: file_size + display_property: dcat:byteSize + help_text: + en: 'Integer value.' + es: 'Valor entero.' + form_group_id: resource_type + +# Resource language (M) +- field_name: language + label: + en: Resource language + es: Idioma de la distribución + preset: select + display_property: dct:language + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Spanish + es: Español + value: http://publications.europa.eu/resource/authority/language/SPA + - label: + en: Catalan + es: Catalán + value: http://publications.europa.eu/resource/authority/language/CAT + - label: + en: Basque + es: Vasco + value: http://publications.europa.eu/resource/authority/language/EUS + - label: + en: Galician + es: Gallego + value: http://publications.europa.eu/resource/authority/language/GLG + - label: + en: Valencian + es: Valenciano + value: http://publications.europa.eu/resource/authority/language/CAT + - label: + en: English + es: Inglés + value: http://publications.europa.eu/resource/authority/language/ENG + - label: + en: German + es: Alemán + value: http://publications.europa.eu/resource/authority/language/DEU + - label: + en: French + es: Francés + value: http://publications.europa.eu/resource/authority/language/FRA + - label: + en: Italian + es: Italiano + value: http://publications.europa.eu/resource/authority/language/ITA + - label: + en: Dutch + es: Neerlandés + value: http://publications.europa.eu/resource/authority/language/NLD + - label: + en: Danish + es: Danés + value: http://publications.europa.eu/resource/authority/language/DAN + - label: + en: Greek + es: Griego + value: http://publications.europa.eu/resource/authority/language/ELL + - label: + en: Portuguese + es: Portugués + value: http://publications.europa.eu/resource/authority/language/POR + - label: + en: Finnish + es: Finés + value: http://publications.europa.eu/resource/authority/language/FIN + - label: + en: Swedish + es: Sueco + value: http://publications.europa.eu/resource/authority/language/SWE + - label: + en: Czech + es: Checo + value: http://publications.europa.eu/resource/authority/language/CES + - label: + en: Estonian + es: Estonio + value: http://publications.europa.eu/resource/authority/language/EST + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Hungarian + es: Húngaro + value: http://publications.europa.eu/resource/authority/language/HUN + - label: + en: Latvian + es: Letón + value: http://publications.europa.eu/resource/authority/language/LAV + - label: + en: Lithuanian + es: Lituano + value: http://publications.europa.eu/resource/authority/language/LIT + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Luxembourgish + es: Luxemburgués + value: http://publications.europa.eu/resource/authority/language/LTZ + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + form_group_id: resource_identification + +# Additional format information (O) +##TODO: To profiles.py +- field_name: resource_relation + label: + en: Additional format information + es: Información adicional sobre el formato + preset: multiple_text_raws_ordered + form_placeholder: 'http://www.catastro.minhap.es/ayuda/lang/castellano/ayuda_descarga_shape.htm' + help_text: + en: 'Link(s) related to the format, where the format, the scheme used for its representation or other technical information on how to access the documents or information resources is indicated.' + es: 'Enlace(s) relacionado(s) con el formato, en dónde se indica el formato, el esquema utilizado para su representación u otra información técnica sobre cómo acceder a los documentos o recursos de información.' + form_group_id: resource_relations + +# Additional format information (O) +- field_name: documentation + label: + en: Documentation + es: Documentación + preset: multiple_text_raws_ordered + validators: ignore_missing scheming_multiple_text + form_placeholder: 'https://example.org/some-doc.html' + help_text: + en: 'A page or document about this resource.' + es: 'Una página o documento sobre este recurso.' + form_group_id: resource_relations + +# Resource License (R) +- field_name: license + label: + en: Distribution license + es: Licencia de la distribución + display_property: dct:license + form_placeholder: + en: e.g. http://creativecommons.org/licenses/by/4.0/ + es: ej. http://creativecommons.org/licenses/by/4.0/ + help_text: + en: 'License definitions and additional information can be found at: Open Definition' + es: 'Las definiciones de las licencias y la información adicional pueden encontrarse en: Open Definition' + help_allow_html: True + form_group_id: resource_license_info + +# Resource limitations on public access (M) +- field_name: rights + label: + en: Resource access Rights + es: Derechos de acceso del recurso + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: dct:accessRights + form_include_blank_choice: False + choices: + - label: + en: Confidential + es: Confidencial + value: http://publications.europa.eu/resource/authority/access-right/CONFIDENTIAL + - label: + en: Non-public + es: No público + value: http://publications.europa.eu/resource/authority/access-right/NON_PUBLIC + - label: + en: Normal + es: Normal + value: http://publications.europa.eu/resource/authority/access-right/NORMAL + - label: + en: Public + es: Público + value: http://publications.europa.eu/resource/authority/access-right/PUBLIC + - label: + en: Restricted + es: Restringido + value: http://publications.europa.eu/resource/authority/access-right/RESTRICTED + - label: + en: Sensitive + es: Sensible + value: http://publications.europa.eu/resource/authority/access-right/SENSITIVE + help_text: + en: 'Name authority list Access right (EU Vocabs)' + es: 'Lista de autoridades Derechos de acceso (EU Vocabs)' + help_allow_html: True + form_group_id: resource_license_info + +# Conformity (M) +- field_name: conforms_to + label: + en: Conformity + es: Conformidad + preset: multiple_text_links + display_property: dct:conformsTo + form_placeholder: 'http://www.opengeospatial.org/standards/wms' + help_text: + en: 'Specification (e.g. OGC). URLs' + es: 'Especificaciones (e.g. OGC). URLs' + form_group_id: resource_standards + +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: resource_standards + +# Coordinate Reference System (C) +- field_name: reference_system + label: + en: Coordinate Reference System + es: Sistema de Referencia de Coordenadas + validators: ignore_missing schemingdcat_valid_url + display_snippet: schemingdcat/display_snippets/link_epsg.html + form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 + help_text: + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + help_allow_html: True + form_group_id: resource_standards + +# Lineage statement (O) +##TODO: provenance + +# Lineage process steps (O) +##TODO: lineage_process_steps diff --git a/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_group.json b/ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_group.json similarity index 100% rename from ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_group.json rename to ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_group.json diff --git a/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_org.json b/ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_org.json similarity index 100% rename from ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_org.json rename to ckanext/schemingdcat/schemas/dcat_ap/es_dcat_ap_org.json diff --git a/ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_full.yaml b/ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_full.yaml new file mode 100644 index 0000000..7388e64 --- /dev/null +++ b/ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_full.yaml @@ -0,0 +1,2670 @@ +scheming_version: 2 +dataset_type: dataset +about: "Datasets/Distributions: Adaptation for CKAN of the DCAT-AP vocabulary (https://semiceu.github.io/DCAT-AP/releases/2.1.1). European context (EU27)" +about_url: https://github.com/mjanez/ckanext-schemingdcat +form_languages: ["en", "es"] +required_language: "en" +schema_version: 3.0 +schema_date: 2024-08-01 +schema_name: eu_dcat_ap_full +schema_title: DCAT-AP +schema_description: DCAT Application profile for data portals in Europe (DCAT-AP) +schema_profile_version: 2.1.1 +schema_profile_url: https://semiceu.github.io/DCAT-AP/releases/2.1.1 +schema_form_groups: + # Basic Info parties form_page (#1) + - form_group_id: title + label: + en: Title + es: Título + fa_icon: fa-sticky-note + - form_group_id: general_info + label: + en: General information + es: Información general + fa_icon: fa-info-circle + - form_group_id: identification + label: + en: Dataset identification + es: Identificación del conjunto de datos + fa_icon: fa-id-card + - form_group_id: notes + label: + en: Abstract + es: Resumen + fa_icon: fa-file-text + - form_group_id: vocabs + label: + en: Vocabs information + es: Información de vocabularios + fa_icon: fa-database + - form_group_id: contact + label: + en: Contact information + es: Información de contacto + fa_icon: fa-address-book + # Responsible parties form_page (#2) + - form_group_id: publisher + label: + en: Publisher information + es: Información del publicador + fa_icon: fa-user + - form_group_id: maintainer + label: + en: Maintainer information + es: Información del mantenedor + fa_icon: fa-server + - form_group_id: author + label: + en: Author information + es: Información del autor + fa_icon: fa-pencil-square + # Quality form_page (#3) + - form_group_id: standards + label: + en: Standards compliance + es: Adecuación a estándares + fa_icon: fa-check-square + - form_group_id: temporal_info + label: + en: Timing + es: Información temporal + fa_icon: fa-clock + - form_group_id: lineage + label: + en: Provenance information + es: Información de procedencia + fa_icon: fa-history + - form_group_id: purpose + label: + en: Purpose of the dataset + es: Propósito del conjunto de datos + fa_icon: fa-question-circle + # Spatial form_page (#4) + - form_group_id: spatial_info + label: + en: Location information + es: Información sobre localización + fa_icon: fa-map-marker + # License form_page (#5) + - form_group_id: license_info + label: + en: License and restrictions + es: Licencia y restricciones + fa_icon: fa-lock + - form_group_id: version_notes + label: + en: Version information + es: Información sobre versiones + fa_icon: fa-info-circle + # Resources form_page + - form_group_id: resource_title + label: + en: Title + es: Título + fa_icon: fa-sticky-note + - form_group_id: resource_notes + label: + en: Abstract + es: Resumen + fa_icon: fa-file-text + - form_group_id: resource_identification + label: + en: Resource identification + es: Identificación del recurso + fa_icon: fa-id-card + - form_group_id: resource_url + label: + en: Resource locator + es: Localizador del recurso + - form_group_id: resource_access_service + label: + en: Data Service of the resource + es: Servicio de datos del recurso + fa_icon: fa-asterisk + - form_group_id: resource_distribution + label: + en: Information on resource distribution + es: Información de la distribución del recurso + fa_icon: fa-list-ul + - form_group_id: resource_type + label: + en: Resource type information + es: Información del tipo de recurso + fa_icon: fa-file-code + - form_group_id: resource_license_info + label: + en: License and restrictions + es: Licencia y restricciones + fa_icon: fa-lock + - form_group_id: resource_lineage + label: + en: Provenance information + es: Información de procedencia + fa_icon: fa-history + - form_group_id: resource_standards + label: + en: Standards compliance + es: Adecuación a estándares + fa_icon: fa-check-square + - form_group_id: resource_relations + label: + en: Related resources + es: Recursos relacionados + fa_icon: fa-code-fork +schema_form_tabs: + # Dataset tabs + - form_tab: basic_tab + tab_type: dataset_fields + label: + en: Identification + es: Identificación + form_group_id: + - title + - general_info + - identification + - notes + - form_tab: vocabs_tab + tab_type: dataset_fields + label: + en: Vocabs + es: Vocabularios + form_group_id: + - vocabs + - form_tab: contact_tab + tab_type: dataset_fields + label: + en: Contact point + es: Punto de contacto + form_group_id: + - contact + - form_tab: publisher_tab + tab_type: dataset_fields + label: + en: Publisher + es: Publicador + form_group_id: + - publisher + - form_tab: responsible_parties_tab + tab_type: dataset_fields + label: + en: Responsible parties + es: Responsables + form_group_id: + - maintainer + - author + - form_tab: quality_tab + tab_type: dataset_fields + label: + en: Quality + es: Calidad + form_group_id: + - standards + - temporal_info + - form_tab: lineage_tab + tab_type: dataset_fields + label: + en: Lineage + es: Linaje + form_group_id: + - lineage + - purpose + - form_tab: spatial_tab + tab_type: dataset_fields + label: + en: Spatial + es: Espacial + form_group_id: + - spatial_info + - form_tab: license_tab + tab_type: dataset_fields + label: + en: License + es: Licencia + form_group_id: + - license_info + - version_notes + # Distribution tabs + - form_tab: resource_basic_tab + tab_type: resource_fields + label: + en: Identification + es: Identificación + form_group_id: + - resource_title + - resource_url + - resource_notes + - resource_identification + - form_tab: resource_distribution + tab_type: resource_fields + label: + en: Distribution + es: Distribución + form_group_id: + - resource_distribution + - resource_type + - resource_access_service + - form_tab: resource_lineage_tab + tab_type: resource_fields + label: + en: Lineage + es: Linaje + form_group_id: + - resource_lineage + - resource_relations + - form_tab: resource_quality_tab + tab_type: resource_fields + label: + en: Quality + es: Calidad + form_group_id: + - resource_standards + - form_tab: resource_license_tab + tab_type: resource_fields + label: + en: License + es: Licencia + form_group_id: + - resource_license_info + +### Codes in Schema +# (M): Mandatory +# (R): Recommended +# (C): Conditional +# (O): Optional + +#--Dataset (dcat:Dataset) fields--# +dataset_fields: + +# Dataset title translated (M) +- field_name: title_translated + label: + en: Dataset title + es: Título del conjunto de datos + preset: schemingdcat_fluent_title_translated + required: True + display_property: dct:title + form_placeholder: + en: e.g. A descriptive title. + es: ej. Un título descriptivo. + form_languages: ["en", "es"] + required_language: "en" + form_group_id: title + +# Metadata template for schemingdcat_xls harvester +- field_name: schemingdcat_xls_metadata_template + label: + en: Metadata template for schemingdcat_xls harvester + es: Plantilla de metadatos para el cosechador schemingdcat_xls + preset: schemingdcat_xls_metadata_template + required: False + choices: + - label: + en: "No" + es: "No" + value: False + - label: + en: "Yes" + es: "Si" + value: True + help_text: + en: 'ckanext-schemingdcat remote Google Sheet/Onedrive Excel metadata harvester' + es: 'ckanext-schemingdcat cosechador de ficheros remotos Google Sheet/Onedrive Excel/a>' + form_group_id: general_info + +# Non-spatial Dataset (Hidden field, based on dcat_type) +- field_name: dataset_scope + label: + en: Scope of the data + es: Alcance de los datos + preset: dataset_scope + required: False + choices: + - label: + en: "Non-spatial dataset" + es: "Conjunto de datos no espaciales" + value: non_spatial_dataset + - label: + en: "Spatial dataset" + es: "Conjunto de datos espaciales" + value: spatial_dataset + form_group_id: general_info + +# CKAN Organization (M) // Dataset privacy (M) +- field_name: owner_org + label: + en: Organization + es: Organización + required: True + help_text: + en: Entity (organisation) responsible for making the Dataset available. + es: Entidad (organización) responsable de publicar el conjunto de datos. + preset: dataset_organization + form_group_id: general_info + +# Graphic overview (O) +- field_name: graphic_overview + label: + en: Graphic overview of the dataset + es: Descripción gráfica del conjunto de datos + display_snippet: schemingdcat/display_snippets/graphic_overview.html + form_placeholder: http://example.com/dataset.jpg + help_text: + en: "Graphic that provides an illustration of the dataset." + es: "Gráfico que ilustra el conjunto de datos." + form_group_id: general_info + +# Metadata file identifier (M) +## Unique resource identifier (UUID) (Mandatory). If it does not exist, CKAN creates a UUID (Metadata file identifier 'package_id') +- field_name: identifier + label: + en: Metadata identifier + es: Identificador de los metadatos + preset: schemingdcat_identifier + required: True + display_property: dct:identifier + form_placeholder: 123e4567-e89b-12d3-a456-426614174000 + help_text: + en: e.g. Unique resource identifier (UUID). + es: Ej. Identificador único de recurso (UUID). + help_allow_html: True + form_group_id: identification + +# Dataset locator (O) +## For all resources that is equivalent to this element, such as a URI (of dcat:Dataset). +- field_name: name + label: + en: URL + es: URL + preset: schemingdcat_dataset_slug + display_property: dcat:landingPage + form_placeholder: + en: URL title Dataset + es: Título de la URL del Dataset + form_slug_related: identifier + form_group_id: identification + +# Dataset type (M) +- field_name: dcat_type + label: + en: Resource type + es: Tipo de recurso + preset: select_not_empty + form_include_blank_choice: False + required: True + display_property: dct:type + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Spatial data set + es: Conjunto de datos espacial + value: http://inspire.ec.europa.eu/metadata-codelist/ResourceType/dataset + dataset_scope: spatial_dataset + - label: + en: Article + es: Artículo + value: http://id.loc.gov/vocabulary/marcgt/art + dataset_scope: non_spatial_dataset + - label: + en: Bibliographic data + es: Datos bibliográficos + value: http://id.loc.gov/vocabulary/marcgt/bda + dataset_scope: non_spatial_dataset + - label: + en: Collection + es: Colección + value: http://purl.org/dc/dcmitype/Collection + dataset_scope: non_spatial_dataset + - label: + en: Database + es: Base de datos + value: http://id.loc.gov/vocabulary/marcgt/dtb + dataset_scope: non_spatial_dataset + - label: + en: Document (computer) + es: Documento (informático) + value: http://id.loc.gov/vocabulary/marcgt/doc + dataset_scope: non_spatial_dataset + - label: + en: Event + es: Evento + value: http://purl.org/dc/dcmitype/Event + dataset_scope: non_spatial_dataset + - label: + en: Government publication + es: Publicación gubernamental + value: http://id.loc.gov/vocabulary/marcgt/gov + dataset_scope: non_spatial_dataset + - label: + en: Image + es: Imagen + value: http://purl.org/dc/dcmitype/Image + dataset_scope: non_spatial_dataset + - label: + en: Still Image + es: Imagen fija + value: http://purl.org/dc/dcmitype/StillImage + dataset_scope: non_spatial_dataset + - label: + en: Journal + es: Revista + value: http://id.loc.gov/vocabulary/marcgt/jou + dataset_scope: non_spatial_dataset + - label: + en: Legislation + es: Legislación + value: http://id.loc.gov/vocabulary/marcgt/leg + dataset_scope: non_spatial_dataset + - label: + en: Moving Image + es: Imagen en movimiento + value: http://purl.org/dc/dcmitype/MovingImage + dataset_scope: non_spatial_dataset + - label: + en: Physical Object + es: Objeto físico + value: http://purl.org/dc/dcmitype/PhysicalObject + dataset_scope: non_spatial_dataset + - label: + en: Reporting + es: Informe + value: http://id.loc.gov/vocabulary/marcgt/rpt + dataset_scope: non_spatial_dataset + - label: + en: Interactive Resource + es: Recurso interactivo + value: http://purl.org/dc/dcmitype/InteractiveResource + dataset_scope: non_spatial_dataset + - label: + en: Spatial data set series + es: Series de datos espaciales + value: http://inspire.ec.europa.eu/metadata-codelist/ResourceType/series + dataset_scope: spatial_dataset + - label: + en: Service + es: Servicio + value: http://purl.org/dc/dcmitype/Service + dataset_scope: non_spatial_dataset + - label: + en: Spatial data service + es: Servicio de datos espaciales + value: http://inspire.ec.europa.eu/metadata-codelist/ResourceType/service + dataset_scope: spatial_dataset + - label: + en: Sound + es: Sonido + value: http://purl.org/dc/dcmitype/Sound + dataset_scope: non_spatial_dataset + - label: + en: Software + es: Software + value: http://purl.org/dc/dcmitype/Software + dataset_scope: non_spatial_dataset + - label: + en: Standard or specification + es: Norma o especificación + value: http://id.loc.gov/vocabulary/marcgt/stp + dataset_scope: non_spatial_dataset + - label: + en: Technical report + es: Informe técnico + value: http://id.loc.gov/vocabulary/marcgt/ter + dataset_scope: non_spatial_dataset + - label: + en: Text + es: Texto + value: http://purl.org/dc/dcmitype/Text + dataset_scope: non_spatial_dataset + form_group_id: identification + +# MDR Themes (M) +## Taxonomy [DCAT-AP](hhttp://publications.europa.eu/resource/authority/data-theme) +- field_name: theme_eu + label: + en: Themes (DCAT-AP) + es: Temáticas (DCAT-AP) + preset: multiple_choice_icon + display_property: dcat:theme + select_size: 10 + required: True + help_text: + en: 'Themes (DCAT-AP)' + es: 'Temáticas (DCAT-AP)' + help_allow_html: True + sorted_choices: True + choices: + - value: http://publications.europa.eu/resource/authority/data-theme/AGRI + label: + en: Agriculture, fisheries, forestry and food + es: Agricultura, pesca, silvicultura y alimentación + - value: http://publications.europa.eu/resource/authority/data-theme/ECON + label: + en: Economy and finance + es: Economía y finanzas + - value: http://publications.europa.eu/resource/authority/data-theme/EDUC + label: + en: Education, culture and sport + es: Educación, cultura y deporte + - value: http://publications.europa.eu/resource/authority/data-theme/ENER + label: + en: Energy + es: Energía + - value: http://publications.europa.eu/resource/authority/data-theme/ENVI + label: + en: Environment + es: Medio ambiente + - value: http://publications.europa.eu/resource/authority/data-theme/GOVE + label: + en: Government and public sector + es: Gobierno y sector público + - value: http://publications.europa.eu/resource/authority/data-theme/HEAL + label: + en: Health + es: Salud + - value: http://publications.europa.eu/resource/authority/data-theme/INTR + label: + en: International issues + es: Asuntos internacionales + - value: http://publications.europa.eu/resource/authority/data-theme/JUST + label: + en: Justice, legal system and public safety + es: Justicia, sistema jurídico y seguridad pública + - value: http://publications.europa.eu/resource/authority/data-theme/REGI + label: + en: Regions and cities + es: Regiones y ciudades + - value: http://publications.europa.eu/resource/authority/data-theme/SOCI + label: + en: Population and society + es: Población y sociedad + - value: http://publications.europa.eu/resource/authority/data-theme/TECH + label: + en: Science and technology + es: Ciencia y tecnología + form_group_id: identification + +# High-value dataset category (R) +- field_name: hvd_category + label: + en: High-value dataset category + es: Categoría del conjunto de alto valor (HVD) + preset: select + display_property: dcatap:hvdCategory + display_snippet: schemingdcat/display_snippets/link_schema.html + help_text: + en: 'More info: High-value datasets - Overview, Vocab - EU Publications and Implementing Act (European Commission)' + es: 'Referencias: Conjuntos de alto valor - Visión generale, Vocabulario - EU Publications y Reglamento de Implementación (Comisión Europea)' + help_allow_html: True + sorted_choices: True + choices: + - label: + en: Meteorological + es: Meteorología + value: http://data.europa.eu/bna/c_164e0bf5 + - label: + en: Companies and company ownership + es: Sociedades y propiedad de sociedades + value: http://data.europa.eu/bna/c_a9135398 + - label: + en: Geospatial + es: Geospacial + value: http://data.europa.eu/bna/c_ac64a52d + - label: + en: Mobility + es: Movilidad + value: http://data.europa.eu/bna/c_b79e35eb + - label: + en: Earth observation and environment + es: Observación de la Tierra y medio ambiente + value: http://data.europa.eu/bna/c_dd313021 + - label: + en: Statistics + es: Estadística + value: http://data.europa.eu/bna/c_e1da4e07 + form_group_id: identification + +# Metadata file language (M) +- field_name: language + label: + en: Metadata language + es: Idioma de los metadatos + preset: select_not_empty + display_property: dct:language + display_snippet: schemingdcat/display_snippets/link_schema.html + form_include_blank_choice: False + required: True + sorted_choices: True + choices: + - label: + en: Spanish + es: Español + value: http://publications.europa.eu/resource/authority/language/SPA + - label: + en: English + es: Inglés + value: http://publications.europa.eu/resource/authority/language/ENG + - label: + en: German + es: Alemán + value: http://publications.europa.eu/resource/authority/language/DEU + - label: + en: French + es: Francés + value: http://publications.europa.eu/resource/authority/language/FRA + - label: + en: Italian + es: Italiano + value: http://publications.europa.eu/resource/authority/language/ITA + - label: + en: Dutch + es: Neerlandés + value: http://publications.europa.eu/resource/authority/language/NLD + - label: + en: Danish + es: Danés + value: http://publications.europa.eu/resource/authority/language/DAN + - label: + en: Greek + es: Griego + value: http://publications.europa.eu/resource/authority/language/ELL + - label: + en: Portuguese + es: Portugués + value: http://publications.europa.eu/resource/authority/language/POR + - label: + en: Finnish + es: Finés + value: http://publications.europa.eu/resource/authority/language/FIN + - label: + en: Swedish + es: Sueco + value: http://publications.europa.eu/resource/authority/language/SWE + - label: + en: Czech + es: Checo + value: http://publications.europa.eu/resource/authority/language/CES + - label: + en: Estonian + es: Estonio + value: http://publications.europa.eu/resource/authority/language/EST + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Hungarian + es: Húngaro + value: http://publications.europa.eu/resource/authority/language/HUN + - label: + en: Latvian + es: Letón + value: http://publications.europa.eu/resource/authority/language/LAV + - label: + en: Lithuanian + es: Lituano + value: http://publications.europa.eu/resource/authority/language/LIT + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Luxembourgish + es: Luxemburgués + value: http://publications.europa.eu/resource/authority/language/LTZ + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + form_group_id: identification + +# Date of creation (O) +- field_name: created + label: + en: Date of creation + es: Fecha de creación + display_property: dct:created + preset: date_created + form_group_id: identification + +# Date of last revision (O) +- field_name: modified + label: + en: Date of last revision + es: Fecha de última modificación + display_snippet: schemingdcat/display_snippets/last_update.html + display_property: dct:modified + preset: date_modified + form_group_id: identification + +# # Dataset abstract translated (M) +- field_name: notes_translated + label: + en: Dataset abstract + es: Resumen del conjunto de datos + preset: schemingdcat_fluent_notes_translated + required: True + display_property: dct:description + form_placeholder: + en: e.g. Some useful description about the dataset. + es: ej. Una descripción útil sobre el conjunto de datos. + form_languages: ["es", "en"] + required_language: "es" + default_values: + en: Default abstract of the {dataset}. + es: Resumen por defecto del conjunto de datos {dataset}. + form_group_id: notes +# Keyword value (M) +- field_name: tag_string + label: + en: Keywords + es: Palabras clave + preset: tag_string_autocomplete + display_property: dct:subject + form_placeholder: 'payments' + help_text: + en: 'A keyword or tag describing the resource.' + es: 'Palabra clave o etiqueta que describe el recurso.' + form_group_id: vocabs + +# Keyword URI (M) +## TODO: Improve form_snippet to generate tag_uri auto from tag_string +## TODO: Add as scheming_datastore_choices (helpers.py/#102) http://github.com/ckan/ckanext-scheming/issues/270 +## Only for ckanext-dcat profiles.py +- field_name: tag_uri + label: + en: Keyword URIs + es: URI de palabras clave + preset: multiple_text + display_snippet: schemingdcat/display_snippets/list_keywords.html + form_placeholder: 'http://inspire.ec.europa.eu/metadata-codelist/IACSData/gsaa' + help_text: + en: 'e.g. Metadata code list register (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' + form_group_id: vocabs + +# TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py +# Metadata point of contact URI (M) +- field_name: contact_uri + label: + en: URI of the Metadata contact point + es: URI del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://orgs.vocab.org/some-org + form_group_id: contact + +# Metadata point of contact name (M) +- field_name: contact_name + label: + en: Metadata contact point name + es: Nombre del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields + display_property: dcat:contactPoint + form_placeholder: José Blanco + form_group_id: contact + +# Metadata point of contact email (M) +- field_name: contact_email + label: + en: Metadata contact point email + es: Email del punto de contacto de los Metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: email + validators: not_empty scheming_required schemingdcat_valid_email schemingdcat_fill_dependent_fields + required: True + display_property: vcard:hasEmail + display_snippet: email.html + form_placeholder: joseblanco@example.com + form_group_id: contact + +# Metadata point of contact Web (R) +- field_name: contact_url + label: + en: Website of the Metadata contact point + es: Web del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: url + preset: valid_url_dependent_fields + display_property: vcard:hasURL + form_placeholder: http://www.example.com + form_group_id: contact + +# GeoDCAT-AP: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact +- field_name: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + display_property: dcat:hadRole + dependent_fields: + field_name: contact + subfields: + - field_name: role + preset: select_dependent_fields + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Resource Provider + es: Proveedor de recursos + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/resourceProvider + geodcatap: geodcatap:resourceProvider + - label: + en: Custodian + es: Custodio + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/custodian + geodcatap: geodcatap:custodian + - label: + en: Owner + es: Propietario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/owner + geodcatap: dct:rightsHolder + - label: + en: User + es: Usuario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/user + geodcatap: geodcatap:user + - label: + en: Distributor + es: Distribuidor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/distributor + geodcatap: geodcatap:distributor + - label: + en: Originator + es: Originador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/originator + geodcatap: geodcatap:originator + - label: + en: Point of Contact + es: Punto de contacto + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/pointOfContact + geodcatap: dcat:contactPoint + - label: + en: Principal Investigator + es: Investigador principal + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/principalInvestigator + geodcatap: geodcatap:principalInvestigator + - label: + en: Processor + es: Procesador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/processor + geodcatap: geodcatap:processor + - label: + en: Publisher + es: Editor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/publisher + geodcatap: dct:publisher + - label: + en: Author + es: Autor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/author + geodcatap: dct:creator + form_group_id: contact + + +# TO MIGRATE: contact dict. Filling with contact_* values +- field_name: contact + label: + en: Contact points + es: Puntos de contacto + repeating_label: + en: Contact point + es: Punto de contacto + form_snippet: null + display_snippet: null + repeating_subfields: + - field_name: uri + legacy: contact_uri + label: + en: URI of the Metadata contact point + es: URI del punto de contacto de los metadatos + + - field_name: name + legacy: contact_name + label: + en: Metadata contact point name + es: Nombre del punto de contacto de los metadatos + + - field_name: email + legacy: contact_email + label: + en: Metadata contact point email + es: Email del punto de contacto de los Metadatos + + - field_name: url + legacy: contact_url + label: + en: Website of the Metadata contact point + es: Web del punto de contacto de los metadatos + + - field_name: role + legacy: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + + help_text: + en: 'Contact information for enquiries about the dataset.' + es: 'Información de contacto para consultas sobre el conjunto de datos.' + form_group_id: contact + + +# Publisher party (M) +- field_name: publisher_name + label: + en: Name of the publisher + es: Nombre del publicador + display_property: foaf:name + form_placeholder: José Blanco + dependent_fields: + field_name: publisher + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields + help_text: + en: "A party that makes a dataset available to others." + es: "Persona u organización que pone a disposición de otros el conjunto de datos." + form_group_id: publisher + +# Publisher identifier (M) +- field_name: publisher_identifier + label: + en: Identifier of the publisher + es: Identificador del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: identifier + validators: schemingdcat_fill_dependent_fields + display_property: dct:identifier + form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 + help_text: + en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." + es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" + help_allow_html: True + form_group_id: publisher + +# Publisher URI (M) +- field_name: publisher_uri + label: + en: URI of the publisher + es: URI del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields + display_snippet: schemingdcat/display_snippets/link_name.html + form_snippet: schemingdcat/form_snippets/publisher_uri.html + form_placeholder: http://orgs.vocab.org/some-org + help_text: + en: This property refers to an Agent (organisation) responsible for making the Catalogue Record available. URI + es: Esta propiedad se refiere a un agente (organización) responsable de poner a disposición el recurso del catálogo. URI + form_group_id: publisher + +# Publisher email (M) +- field_name: publisher_email + label: + en: Email of the publisher + es: Email del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: email + preset: schemingdcat_valid_email_dependent_fields + display_property: foaf:mbox + form_placeholder: joseblanco@example.com + form_group_id: publisher + +# Publisher URL (O) +- field_name: publisher_url + label: + en: Website of the publisher + es: Web del publicador + display_property: foaf:homepage + form_placeholder: http://www.example.com + dependent_fields: + field_name: publisher + subfields: + - field_name: url + preset: valid_url_dependent_fields + help_text: + en: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL + es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL + form_group_id: publisher + +# Publisher type (M) +- field_name: publisher_type + label: + en: Type of the publisher + es: Tipo de publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: type + preset: select_dependent_fields + display_property: dct:type + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: National authority + es: Autoridad nacional + value: http://purl.org/adms/publishertype/NationalAuthority + - label: + en: Regional authority + es: Autoridad regional + value: http://purl.org/adms/publishertype/RegionalAuthority + - label: + en: Supranational authority + es: Autoridad supranacional + value: http://purl.org/adms/publishertype/SupraNationalAuthority + - label: + en: Local authority + es: Autoridad local + value: http://purl.org/adms/publishertype/LocalAuthority + - label: + en: Academia-Scientific organisation + es: Organización académica-científica + value: http://purl.org/adms/publishertype/Academia-ScientificOrganisation + - label: + en: Non profit organisation + es: Organización sin animo de lucro + value: http://purl.org/adms/publishertype/NonProfitOrganisation + - label: + en: Company + es: Empresa + value: http://purl.org/adms/publishertype/Company + - label: + en: Industry consortium + es: Consorcio industrial + value: http://purl.org/adms/publishertype/IndustryConsortium + - label: + en: Non Governmental Organisation + es: Organización no gubernamental (ONG) + value: http://purl.org/adms/publishertype/NonGovernmentalOrganisation + - label: + en: Private individual(s) + es: Individuo(s) privado(s) + value: http://purl.org/adms/publishertype/PrivateIndividual(s) + - label: + en: Standardisation body + es: Organismo de normalización + value: http://purl.org/adms/publishertype/StandardisationBody + form_group_id: publisher + +# TO MIGRATE: Publisher dict. Filling with publisher_* values +- field_name: publisher + label: + en: Publisher + es: Publicador + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: publisher_uri + label: + en: URI of the publisher + es: URI del publicador + + - field_name: name + legacy: publisher_name + label: + en: URI + es: URI + + - field_name: email + legacy: publisher_email + label: + en: Email of the publisher + es: Email del publicador + + - field_name: identifier + legacy: publisher_identifier + label: + en: Identifier of the publisher + es: Identificador del publicador + + - field_name: url + legacy: publisher_url + label: + en: Website of the publisher + es: Web del publicador + + - field_name: type + legacy: publisher_type + label: + en: Type of the publisher + es: Tipo de publicador + + help_text: + en: 'Entity responsible for making the dataset available.' + es: 'Entidad responsable de la puesta a disposición del conjunto de datos.' + form_group_id: publisher + +# Maintainer name (O) +- field_name: maintainer + label: + en: Name of the dataset maintainer + es: Nombre del mantenedor + display_property: dcat:contactPoint + form_placeholder: José Blanco + help_text: + en: "Person or organization responsible for maintaining or updating a dataset." + es: "Persona u organización responsable de mantener o actualizar un conjunto de datos." + form_group_id: maintainer + +# Maintainer name (O). Fallback, CKAN using maintainer in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: maintainer_name + label: + en: Name of the dataset maintainer + es: Nombre del mantenedor + validators: if_empty_same_as(maintainer) unicode_safe + preset: hide_fallback + form_group_id: maintainer + +# Maintainer Identifier (O) +- field_name: maintainer_uri + label: + en: Identifier of the dataset maintainer + es: Identificador del mantenedor + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 + help_text: + en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." + es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" + help_allow_html: True + form_group_id: maintainer + +# Maintainer email (O) +- field_name: maintainer_email + label: + en: Email of the dataset maintainer + es: Email del mantenedor + preset: schemingdcat_valid_email + display_property: vcard:hasEmail + form_placeholder: joseblanco@example.com + form_group_id: maintainer + +# Maintainer web (O) +- field_name: maintainer_url + label: + en: Website of the dataset maintainer + es: Web del mantenedor + display_property: foaf:homepage + form_placeholder: http://www.example.com + preset: valid_url + help_text: + en: This property refers to a web page that acts as the maintainer's homepage. URL + es: Esta propiedad se refiere a una página web que actúa como página principal del mantenedor. URL + form_group_id: maintainer + +# Author name (O) +- field_name: author + label: + en: Name of the dataset creator + es: Nombre del autor + display_property: dct:creator + form_placeholder: José Blanco + help_text: + en: "A party that creates or produces a particular dataset." + es: "Persona u organización creadora o productora de un conjunto de datos" + form_group_id: author + +# Author name (O). Fallback, CKAN using author in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: author_name + label: + en: Name of the dataset author + es: Nombre del mantenedor + validators: if_empty_same_as(author) unicode_safe + preset: hide_fallback + form_group_id: author + +# Author Identifier (O) +- field_name: author_uri + label: + en: Identifier of the dataset creator + es: Identificador del autor + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 + help_text: + en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." + es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" + help_allow_html: True + form_group_id: author + +# Author email (O) +- field_name: author_email + label: + en: Email of the dataset creator + es: Email del autor + preset: schemingdcat_valid_email + display_property: vcard:hasEmail + form_placeholder: joseblanco@example.com + form_group_id: author + +# Author web (O) +- field_name: author_url + label: + en: Website of the dataset creator + es: Web del autor + display_property: foaf:homepage + preset: valid_url + form_placeholder: http://www.example.com + help_text: + en: This property refers to a web page that acts as the author's homepage. URL + es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL + form_group_id: author + +# Other identifier (O)) +- field_name: alternate_identifier + label: + en: Other identifier + es: Identificador alternativo + display_property: adms:identifier + form_placeholder: doi:10.1234/example-dataset + help_text: + en: 'An alternate identifier in a particular context, can express other locally minted identifiers or external identifiers, like DOI, ELI, arΧiv for creative works and ORCID, VIAF, ISNI for actors such as authors and publishers, as long as the identifiers are globally unique and stable.' + es: 'Un identificador alternativo en un contexto particular, puede expresar otros identificadores acuñados localmente o identificadores externos, como DOI, ELI, arΧiv para obras creativas y ORCID, VIAF, ISNI para actores como autores y editores, siempre que los identificadores sean globalmente únicos y estables.' + help_allow_html: True + form_group_id: standards + +# Lineage statement (M) +- field_name: provenance + label: + en: Lineage statement + es: Declaración de linaje + preset: schemingdcat_fluent_markdown + display_property: dct:provenance + form_placeholder: + en: Means the history of a data set, and the life cycle from collection and acquisition through compilation and derivation to its current form, in accordance with EN ISO-19101. + es: Historia de un conjunto de datos y su ciclo de vida desde su recogida y adquisición hasta su compilación y derivación hasta su forma actual, con arreglo a la norma EN ISO-19101. + form_languages: ["en", "es"] + form_group_id: lineage + +# Conformity (M) +- field_name: conforms_to + label: + en: Conformity + es: Conformidad + required: False + display_property: dct:conformsTo + preset: multiple_text_links + form_placeholder: 'https://www.w3.org/TR/rdf-schema/' + help_text: + en: 'An established standard to which the described resource conforms.' + es: 'Norma establecida a la que se ajusta el recurso descrito.' + form_group_id: standards + +# Metadata standard (M) +- field_name: metadata_profile + label: + en: Metadata Standard + es: Perfil de Metadatos + required: False + display_property: dct:conformsTo + preset: multiple_metadata_profiles + form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/2.0.0' + help_text: + en: 'URI(s) of the Metadata profile used' + es: 'URI(s) del perfil de Metadatos utilizado' + form_group_id: standards + +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: standards + +# Temporal start (O) +- field_name: temporal_start + label: + en: Temporal extent (Start) + es: Cobertura temporal (Inicio) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: start + display_property: dct:temporal + preset: date_dependent_fields + form_group_id: temporal_info + +# Temporal end (O) +- field_name: temporal_end + label: + en: Temporal extent (End) + es: Cobertura temporal (Fin) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: end + display_property: dct:temporal + preset: date_dependent_fields + form_group_id: temporal_info + +# TO MIGRATE: Temporal coverage dict. Filling with temporal_* values +- field_name: temporal_coverage + label: + en: Temporal coverage + es: Cobertura temporal + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: start + legacy: temporal_start + label: + en: Temporal extent (Start) + es: Cobertura temporal (Inicio) + + - field_name: end + legacy: temporal_end + label: + en: Temporal extent (End) + es: Cobertura temporal (Fin) + + help_text: + en: The temporal period or periods the dataset covers. + es: Periodo o periodos temporales que abarca el conjunto de datos. + form_group_id: temporal_info + +# Update frequency (O) +- field_name: frequency + label: + en: Update frequency + es: Frecuencia de actualización + preset: select + display_property: dct:accrualPeriodicity + display_snippet: schemingdcat/display_snippets/link_schema.html + sorted_choices: True + choices: + - label: + en: Annual + es: Anual + value: http://publications.europa.eu/resource/authority/frequency/ANNUAL + - label: + en: Semiannual + es: Semestral + value: http://publications.europa.eu/resource/authority/frequency/ANNUAL_2 + - label: + en: Three times a year + es: Cuatrimestral + value: http://publications.europa.eu/resource/authority/frequency/ANNUAL_3 + - label: + en: Biennial + es: Bienal + value: http://publications.europa.eu/resource/authority/frequency/BIENNIAL + - label: + en: Bimonthly + es: Bimestral + value: http://publications.europa.eu/resource/authority/frequency/BIMONTHLY + - label: + en: Biweekly + es: Quincenal + value: http://publications.europa.eu/resource/authority/frequency/BIWEEKLY + - label: + en: Continuous + es: Continuo + value: http://publications.europa.eu/resource/authority/frequency/CONT + - label: + en: Daily + es: Diario + value: http://publications.europa.eu/resource/authority/frequency/DAILY + - label: + en: Twice a day + es: Dos veces al día + value: http://publications.europa.eu/resource/authority/frequency/DAILY_2 + - label: + en: Irregular + es: Irregular + value: http://publications.europa.eu/resource/authority/frequency/IRREG + - label: + en: Monthly + es: Mensual + value: http://publications.europa.eu/resource/authority/frequency/MONTHLY + - label: + en: Semimonthly + es: Bimensual + value: http://publications.europa.eu/resource/authority/frequency/MONTHLY_2 + - label: + en: Three times a month + es: Tres veces por mes + value: http://publications.europa.eu/resource/authority/frequency/MONTHLY_3 + - label: + en: Never + es: Nunca + value: http://publications.europa.eu/resource/authority/frequency/NEVER + - label: + en: Provisional data + es: Datos provisionales + value: http://publications.europa.eu/resource/authority/frequency/OP_DATPRO + - label: + en: Quarterly + es: Trimestral + value: http://publications.europa.eu/resource/authority/frequency/QUARTERLY + - label: + en: Triennial + es: Trienal + value: http://publications.europa.eu/resource/authority/frequency/TRIENNIAL + - label: + en: Unknown + es: Desconocida + value: http://publications.europa.eu/resource/authority/frequency/UNKNOWN + - label: + en: Continuously updated + es: Continuamente actualizado + value: http://publications.europa.eu/resource/authority/frequency/UPDATE_CONT + - label: + en: Semiweekly + es: Bisemanal + value: http://publications.europa.eu/resource/authority/frequency/WEEKLY_2 + - label: + en: Three times a week + es: Tres veces por semana + value: http://publications.europa.eu/resource/authority/frequency/WEEKLY_3 + - label: + en: Quinquennial + es: Cada cinco años + value: http://publications.europa.eu/resource/authority/frequency/QUINQUENNIAL + - label: + en: Decennial + es: Cada diez años + value: http://publications.europa.eu/resource/authority/frequency/DECENNIAL + - label: + en: Hourly + es: Cada hora + value: http://publications.europa.eu/resource/authority/frequency/HOURLY + - label: + en: Quadrennial + es: Cada cuatro años + value: http://publications.europa.eu/resource/authority/frequency/QUADRENNIAL + - label: + en: Bihourly + es: Cada dos horas + value: http://publications.europa.eu/resource/authority/frequency/BIHOURLY + - label: + en: Trihourly + es: Cada tres horas + value: http://publications.europa.eu/resource/authority/frequency/TRIHOURLY + - label: + en: Bidecennial + es: Cada veinte años + value: http://publications.europa.eu/resource/authority/frequency/BIDECENNIAL + - label: + en: Tridecennial + es: Cada treinta años + value: http://publications.europa.eu/resource/authority/frequency/TRIDECENNIAL + form_group_id: temporal_info + +# Source dataset (C) +- field_name: source + label: + en: Source dataset + es: Conjunto de datos de origen + display_property: dct:source + display_snippet: schemingdcat/display_snippets/link_name.html + form_placeholder: http://example.org/catalog/en/dataset/fc21c1a5-4c02-4157-9d2f-9a2cd200f908 + help_text: + en: This property refers to a related Dataset from which the described Dataset is derived. URI + es: Esta propiedad hace referencia a un conjunto de datos relacionado del que deriva el conjunto de datos descrito. URI + form_group_id: lineage + +# Related resources (O) +- field_name: reference + label: + en: Related sources + es: Recurso(s) relacionado(s) + preset: multiple_text_links + display_property: dcat:relation + form_placeholder: 'http://example.org/catalog/dataset/ejemplo' + help_text: + en: 'URI identifying the related resource. You can include as many properties as you know of references.' + es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' + form_group_id: lineage + +# Related resources (O) +- field_name: is_referenced_by + label: + en: Is referenced by + es: Es referenciado por + preset: multiple_text_links + display_property: dct:isReferencedBy + form_placeholder: 'http://example.org/catalog/dataset/ejemplo' + help_text: + en: 'A related resource, such as a publication, that references, cites, or otherwise points to the dataset.' + es: 'Un recurso relacionado, como una publicación, que referencia, cita o de otro modo apunta al conjunto de datos.' + form_group_id: lineage + +# Purpose (O) +- field_name: purpose + label: + en: Purpose + es: Propósito + form_placeholder: 'Environment management.' + preset: schemingdcat_fluent_text + help_text: + en: 'Summary of the intentions for which the dataset was developed (ISO 19115).' + es: 'Resumen de las intenciones para las que se desarrolló el conjunto de datos (ISO 19115).' + form_languages: ["en", "es"] + form_group_id: purpose + +# Character encoding (C) +- field_name: encoding + label: + en: Character encoding + es: Codificación + display_property: cnt:characterEncoding + form_placeholder: UTF-8 + help_text: + en: 'Character encoding in ISO-19115 metadata is specified with a code list that can be mapped to the corresponding codes in [IANA-CHARSETS]' + es: 'La codificación de caracteres en los metadatos ISO-19115 se especifica con una lista de códigos que puede asignarse a los códigos correspondientes en [IANA-CHARSETS].' + help_allow_html: True + form_group_id: standards + +##TODO: temporal_resolution +## Add codelist or validator to check ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i +- field_name: temporal_resolution + label: + en: Temporal resolution + es: Resolución Temporal + help_text: + en: 'Minimum time period resolvable in the dataset,[ISO 8601].' + es: 'Período de tiempo mínimo resoluble en el conjunto de datos, ISO 8601., [ISO 8601].' + form_group_id: standards + + +# Coordinate Reference System (M) +- field_name: reference_system + label: + en: Coordinate Reference System + es: Sistema de Referencia de Coordenadas + validators: ignore_missing schemingdcat_valid_url + display_snippet: schemingdcat/display_snippets/link_epsg.html + form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 + help_text: + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + help_allow_html: True + form_group_id: spatial_info + +# Geographic bounding box (M) +- field_name: spatial + label: + en: Bounding Box + es: Extensión espacial + preset: spatial_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: bbox + - field_name: geom + - field_name: centroid + form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' + help_text: + en: 'If a Geographic identifier is selected and this element is empty, it will be filled in automatically.Draw BBox and copy GEOJSON with "coordinates" value.. e.g. {"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}
Only "geometry" dict with "type" and "coordinates" elements. More information at GeoJSON bounding boxes.' + es: 'Sí se selecciona un Identificador geográfico y este elemento esta vacío, se rellena automáticamente.

Dibuja el BBox y copia el GEOJSON con el valor de "coordinates". ej: {"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}
Solo es necesario el diccionario "geometry" con los elementos "type" y "coordinates". Más información en GeoJSON bounding boxes.' + help_allow_html: True + form_group_id: spatial_info + +# Geographic identifier (O) +- field_name: spatial_uri + label: + en: Geographic identifier + es: Identificador geográfico + preset: select_spatial_icon_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: uri + - field_name: text + display_property: dcat:theme + select_size: 10 + sorted_choices: False + choices: + - label: + en: Spain + es: España + spatial: '{"type": "Polygon", "coordinates": [[[-18.17, 27.64], [4.32, 27.64], + [4.32, 43.76], [-18.17, 43.76], [-18.17, 27.64]]]}' + value: http://publications.europa.eu/resource/authority/country/ESP + - label: + en: European Union + es: Unión Europea + spatial: '{"type": "Polygon", "coordinates": [[[-10.478556, 34.633284672291], [34.597916, 34.633284672291], [34.597916, 70.096054], [-10.478556, 70.096054], [-10.478556, 34.633284672291]]]}' + value: http://publications.europa.eu/resource/authority/country/EUR + - label: + en: Germany + es: Alemania + spatial: '{"type": "Polygon", "coordinates": [[[5.87, 47.27], [15.03, 47.27], + [15.03, 55.06], [5.87, 55.06], [5.87, 47.27]]]}' + value: http://publications.europa.eu/resource/authority/country/DEU + - label: + en: Austria + es: Austria + spatial: '{"type": "Polygon", "coordinates": [[[9.53, 46.41], [17.17, 46.41], + [17.17, 49.02], [9.53, 49.02], [9.53, 46.41]]]}' + value: http://publications.europa.eu/resource/authority/country/AUT + - label: + en: Belgium + es: Bélgica + spatial: '{"type": "Polygon", "coordinates": [[[2.54, 49.51], [6.4, 49.51], [6.4, + 51.5], [2.54, 51.5], [2.54, 49.51]]]}' + value: http://publications.europa.eu/resource/authority/country/BEL + - label: + en: Bulgaria + es: Bulgaria + spatial: '{"type": "Polygon", "coordinates": [[[22.37, 41.24], [28.61, 41.24], + [28.61, 44.22], [22.37, 44.22], [22.37, 41.24]]]}' + value: http://publications.europa.eu/resource/authority/country/BGR + - label: + en: Cyprus + es: Chipre + spatial: '{"type": "Polygon", "coordinates": [[[32.27, 34.64], [34.59, 34.64], + [34.59, 35.69], [32.27, 35.69], [32.27, 34.64]]]}' + value: http://publications.europa.eu/resource/authority/country/CYP + - label: + en: Croatia + es: Croacia + spatial: '{"type": "Polygon", "coordinates": [[[13.5, 42.4], [19.43, 42.4], [19.43, + 46.54], [13.5, 46.54], [13.5, 42.4]]]}' + value: http://publications.europa.eu/resource/authority/country/HRV + - label: + en: Denmark + es: Dinamarca + spatial: '{"type": "Polygon", "coordinates": [[[8.09, 54.56], [15.15, 54.56], + [15.15, 57.75], [8.09, 57.75], [8.09, 54.56]]]}' + value: http://publications.europa.eu/resource/authority/country/DNK + - label: + en: Slovakia + es: Eslovaquia + spatial: '{"type": "Polygon", "coordinates": [[[16.84, 47.74], [22.56, 47.74], + [22.56, 49.6], [16.84, 49.6], [16.84, 47.74]]]}' + value: http://publications.europa.eu/resource/authority/country/SVK + - label: + en: Slovenia + es: Eslovenia + spatial: '{"type": "Polygon", "coordinates": [[[13.38, 45.43], [16.61, 45.43], + [16.61, 46.88], [13.38, 46.88], [13.38, 45.43]]]}' + value: http://publications.europa.eu/resource/authority/country/SVN + - label: + en: Estonia + es: Estonia + spatial: '{"type": "Polygon", "coordinates": [[[21.84, 57.52], [28.19, 57.52], + [28.19, 59.66], [21.84, 59.66], [21.84, 57.52]]]}' + value: http://publications.europa.eu/resource/authority/country/EST + - label: + en: Finland + es: Finlandia + spatial: '{"type": "Polygon", "coordinates": [[[19.51, 59.81], [31.58, 59.81], + [31.58, 70.09], [19.51, 70.09], [19.51, 59.81]]]}' + value: http://publications.europa.eu/resource/authority/country/FIN + - label: + en: France + es: Francia + spatial: '{"type": "Polygon", "coordinates": [[[-4.79, 41.36], [9.56, 41.36], + [9.56, 51.09], [-4.79, 51.09], [-4.79, 41.36]]]}' + value: http://publications.europa.eu/resource/authority/country/FRA + - label: + en: Greece + es: Grecia + spatial: '{"type": "Polygon", "coordinates": [[[19.64, 34.93], [28.24, 34.93], + [28.24, 41.75], [19.64, 41.75], [19.64, 34.93]]]}' + value: http://publications.europa.eu/resource/authority/country/GRC + - label: + en: Hungary + es: Hungría + spatial: '{"type": "Polygon", "coordinates": [[[16.11, 45.75], [22.89, 45.75], + [22.89, 48.58], [16.11, 48.58], [16.11, 45.75]]]}' + value: http://publications.europa.eu/resource/authority/country/HUN + - label: + en: Ireland + es: Irlanda + spatial: '{"type": "Polygon", "coordinates": [[[-10.47, 51.45], [-6.01, 51.45], + [-6.01, 55.38], [-10.47, 55.38], [-10.47, 51.45]]]}' + value: http://publications.europa.eu/resource/authority/country/IRL + - label: + en: Italy + es: Italia + spatial: '{"type": "Polygon", "coordinates": [[[6.62, 36.65], [18.51, 36.65], + [18.51, 47.09], [6.62, 47.09], [6.62, 36.65]]]}' + value: http://publications.europa.eu/resource/authority/country/ITA + - label: + en: Latvia + es: Letonia + spatial: '{"type": "Polygon", "coordinates": [[[20.97, 55.67], [28.24, 55.67], + [28.24, 58.08], [20.97, 58.08], [20.97, 55.67]]]}' + value: http://publications.europa.eu/resource/authority/country/LVA + - label: + en: Lithuania + es: Lituania + spatial: '{"type": "Polygon", "coordinates": [[[20.94, 53.89], [26.81, 53.89], + [26.81, 56.45], [20.94, 56.45], [20.94, 53.89]]]}' + value: http://publications.europa.eu/resource/authority/country/LTU + - label: + en: Luxembourg + es: Luxemburgo + spatial: '{"type": "Polygon", "coordinates": [[[5.73, 49.45], [6.52, 49.45], [6.52, + 50.18], [5.73, 50.18], [5.73, 49.45]]]}' + value: http://publications.europa.eu/resource/authority/country/LUX + - label: + en: Malta + es: Malta + spatial: '{"type": "Polygon", "coordinates": [[[14.33, 35.8], [14.57, 35.8], [14.57, + 35.99], [14.33, 35.99], [14.33, 35.8]]]}' + value: http://publications.europa.eu/resource/authority/country/MLT + - label: + en: New Zealand + es: Nueva Zelanda + spatial: '{"type": "Polygon", "coordinates": [[[-176.85, -52.58], [178.84, -52.58], + [178.84, -34.41], [-176.85, -34.41], [-176.85, -52.58]]]}' + value: http://publications.europa.eu/resource/authority/country/NZL + - label: + en: Netherlands + es: Países Bajos + spatial: '{"type": "Polygon", "coordinates": [[[3.37, 50.75], [7.21, 50.75], [7.21, + 53.47], [3.37, 53.47], [3.37, 50.75]]]}' + value: http://publications.europa.eu/resource/authority/country/NLD + - label: + en: Poland + es: Polonia + spatial: '{"type": "Polygon", "coordinates": [[[14.15, 49.0], [24.14, 49.0], [24.14, + 54.84], [14.15, 54.84], [14.15, 49.0]]]}' + value: http://publications.europa.eu/resource/authority/country/POL + - label: + en: Portugal + es: Portugal + spatial: '{"type": "Polygon", "coordinates": [[[-9.49, 37.01], [-6.19, 37.01], + [-6.19, 42.15], [-9.49, 42.15], [-9.49, 37.01]]]}' + value: http://publications.europa.eu/resource/authority/country/PRT + - label: + en: Czech Republic + es: República Checa + spatial: '{"type": "Polygon", "coordinates": [[[12.09, 48.58], [18.85, 48.58], + [18.85, 51.05], [12.09, 51.05], [12.09, 48.58]]]}' + value: http://publications.europa.eu/resource/authority/country/CZE + - label: + en: Romania + es: Rumania + spatial: '{"type": "Polygon", "coordinates": [[[20.26, 43.62], [29.67, 43.62], + [29.67, 48.26], [20.26, 48.26], [20.26, 43.62]]]}' + value: http://publications.europa.eu/resource/authority/country/ROU + - label: + en: Sweden + es: Suecia + spatial: '{"type": "Polygon", "coordinates": [[[11.11, 55.34], [24.17, 55.34], + [24.17, 69.06], [11.11, 69.06], [11.11, 55.34]]]}' + value: http://publications.europa.eu/resource/authority/country/SWE + - label: + en: Argentina + es: Argentina + spatial: '{"type": "Polygon", "coordinates": [[[-73.58, -55.05], [-53.65, -55.05], + [-53.65, -21.78], [-73.58, -21.78], [-73.58, -55.05]]]}' + value: http://publications.europa.eu/resource/authority/country/ARG + - label: + en: Australia + es: Australia + spatial: '{"type": "Polygon", "coordinates": [[[112.91, -54.75], [158.96, -54.75], + [158.96, -10.14], [112.91, -10.14], [112.91, -54.75]]]}' + value: http://publications.europa.eu/resource/authority/country/AUS + - label: + en: Brazil + es: Brasil + spatial: '{"type": "Polygon", "coordinates": [[[-74.0, -33.74], [-34.79, -33.74], + [-34.79, 5.27], [-74.0, 5.27], [-74.0, -33.74]]]}' + value: http://publications.europa.eu/resource/authority/country/BRA + - label: + en: Canada + es: Canadá + spatial: '{"type": "Polygon", "coordinates": [[[-141.0, 41.68], [-52.62, 41.68], + [-52.62, 83.11], [-141.0, 83.11], [-141.0, 41.68]]]}' + value: http://publications.europa.eu/resource/authority/country/CAN + - label: + en: China + es: China + spatial: '{"type": "Polygon", "coordinates": [[[73.62, 18.17], [134.77, 18.17], + [134.77, 53.55], [73.62, 53.55], [73.62, 18.17]]]}' + value: http://publications.europa.eu/resource/authority/country/CHN + - label: + en: United States + es: Estados Unidos + spatial: '{"type": "Polygon", "coordinates": [-178.22, 18.93], [179.78, 18.93], [179.78, 71.35], [-178.22, 71.35], [-178.22, 18.93]}' + value: http://publications.europa.eu/resource/authority/country/USA + - label: + en: Japan + es: Japón + spatial: '{"type": "Polygon", "coordinates": [[[123.68, 24.25], [145.81, 24.25], + [145.81, 45.49], [123.68, 45.49], [123.68, 24.25]]]}' + value: http://publications.europa.eu/resource/authority/country/JPN + - label: + en: Mexico + es: Mexico + spatial: '{"type": "Polygon", "coordinates": [[[-118.4, 14.55], [-86.74, 14.55], + [-86.74, 32.72], [-118.4, 32.72], [-118.4, 14.55]]]}' + value: http://publications.europa.eu/resource/authority/country/MEX + - label: + en: New Zeland + es: Nueva Zelanda + spatial: '{"type": "Polygon", "coordinates": [[[-176.85, -52.58], [178.84, -52.58], + [178.84, -34.41], [-176.85, -34.41], [-176.85, -52.58]]]}' + value: http://publications.europa.eu/resource/authority/country/NZL + - label: + en: United Kingdom + es: Reino Unido + spatial: '{"type": "Polygon", "coordinates": [-8.17, 49.96], [1.75, 49.96], [1.75, 60.84], [-8.17, 60.84], [-8.17, 49.96]}' + value: http://publications.europa.eu/resource/authority/country/GBR + help_text: + en: 'Geographic coverage of the dataset. More information in EU Vocab Countries.' + es: 'Ámbito geográfico cubierto por el conjunto de datos. Más información en EU Vocab Countries.' + help_allow_html: True + form_group_id: spatial_info + +# TO MIGRATE: Geographic bounding box dict. Filling with spatial_* values +- field_name: spatial_coverage + label: + en: Spatial coverage + es: Cobertura espacial + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: spatial_uri + label: + en: URI + es: URI + + - field_name: text + legacy: spatial_uri + label: + en: Label + es: Etiqueta + form_placeholder: 'España' + + - field_name: geom + legacy: spatial_geom + label: + en: Geometry + es: Geometría + form_placeholder: '{"type": "Polygon", "coordinates": [[[11.9936, 54.0486], [11.9936, 54.2466], [12.3045, 54.2466], [12.3045, 54.0486], [11.9936, 54.0486]]]}' + validators: schemingdcat_valid_json_object + + - field_name: bbox + legacy: spatial + label: + en: Bounding Box + es: Extensión espacial + form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' + validators: schemingdcat_valid_json_object + + - field_name: centroid + legacy: spatial_centroid + label: + en: Centroid + es: Centroide + form_placeholder: '{"type": "Point", "coordinates": [1.5, 1.5]}' + validators: schemingdcat_valid_json_object + + help_text: + en: 'A geographic region that is covered by the dataset.' + es: 'Región geográfica que abarca el conjunto de datos.' + form_group_id: spatial_info + + +# Spatial representation type (O) +- field_name: representation_type + label: + en: Spatial representation Type + es: Tipo de representación espacial + preset: select + display_property: adms:representationTechnique + display_snippet: schemingdcat/display_snippets/link_schema.html + help_text: + en: 'Spatial representation type (INSPIRE)' + es: 'Tipos de representación espacial (INSPIRE)' + help_allow_html: True + sorted_choices: True + choices: + - label: + en: Grid + es: Rejilla + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/grid + - label: + en: Stereo model + es: Modelo estéreo + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/stereoModel + - label: + en: Text table + es: Tabla de texto + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/textTable + - label: + en: TIN + es: TIN + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/tin + - label: + en: Vector + es: Vector + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/vector + - label: + en: Video + es: Vídeo + value: http://inspire.ec.europa.eu/metadata-codelist/SpatialRepresentationType/video + form_group_id: spatial_info + +# Spatial resolution (C) +- field_name: spatial_resolution_in_meters + label: + en: Spatial resolution of the dataset (m) + es: Resolución espacial del dataset (m) + display_property: dcat:spatialResolutionInMeters + form_placeholder: '5000' + help_text: + en: Specify spatial resolution as distance in metres. + es: Especifique la resolución espacial como distancia en metros + form_group_id: spatial_info + +# License URI (M) +- field_name: license_id + label: + en: License + es: Licencia + form_snippet: license.html + display_property: dct:license + help_text: + en: 'License definitions and additional information can be found at: Open Definition' + es: 'Las definiciones de las licencias y la información adicional pueden encontrarse en: Open Definition' + help_allow_html: True + form_group_id: license_info + +# Conditions for access and use and limitations on public access (M) +- field_name: access_rights + label: + en: Access Rights + es: Derechos de acceso + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: dct:accessRights + form_include_blank_choice: False + choices: + - label: + en: Confidential + es: Confidencial + value: http://publications.europa.eu/resource/authority/access-right/CONFIDENTIAL + - label: + en: Non-public + es: No público + value: http://publications.europa.eu/resource/authority/access-right/NON_PUBLIC + - label: + en: Normal + es: Normal + value: http://publications.europa.eu/resource/authority/access-right/NORMAL + - label: + en: Public + es: Público + value: http://publications.europa.eu/resource/authority/access-right/PUBLIC + - label: + en: Restricted + es: Restringido + value: http://publications.europa.eu/resource/authority/access-right/RESTRICTED + - label: + en: Sensitive + es: Sensible + value: http://publications.europa.eu/resource/authority/access-right/SENSITIVE + help_text: + en: 'Name authority list Access right (EU Vocabs)' + es: 'Lista de autoridades Derechos de acceso (EU Vocabs)' + help_allow_html: True + form_group_id: license_info + +# Version number (O) +- field_name: version + label: + en: Version + es: Versión + help_text: + en: Version number or other version designation of the Dataset. + es: Número de versión u otra designación de versión del conjunto de datos. + display_property: owl:versionInfo + validators: ignore_missing unicode_safe package_version_validator + form_placeholder: '1.0' + form_group_id: version_notes + +# Version information (O) +- field_name: version_notes + label: + en: Version notes + es: Notas sobre la versión + help_text: + en: A description of the differences between this version and a previous version of the Dataset. + es: Una descripción de las diferencias entre esta versión y una versión anterior del Dataset. + preset: schemingdcat_fluent_markdown + display_property: adms:versionNotes + form_placeholder: + en: e.g. Some useful version notes about the dataset. + es: ej. Una descripción útil sobre las diferencias de esta versión del conjunto de datos. + form_languages: ["en", "es"] + form_group_id: version_notes + +# Dataset validity (O) +- field_name: valid + label: + en: Dataset validity + es: Vigencia del conjunto de datos + display_property: dct:valid + preset: date + form_group_id: version_notes + +#--Resource/Distribution (dcat:Distribution) fields--# +resource_fields: + +# Access URL (M) +- field_name: url + label: + en: URL + es: URL + preset: resource_url_upload + display_snippet: schemingdcat/display_snippets/link.html + form_group_id: resource_url + +# Access URL (M). Hide, falls back to the standard resource url field +- field_name: access_url + label: + en: Access URL + es: URL de acceso + validators: if_empty_same_as(url) unicode_safe + form_snippet: null + display_property: dcat:accessURL + display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that gives access to the dataset (defaults to the standard resource URL).' + es: 'URL que da acceso al conjunto de datos (por defecto es la URL de recursos estándar).' + form_group_id: resource_url + +# Access URL (M). Falls back to the standard resource url field +- field_name: download_url + label: + en: Download URL + es: URL de descarga + validators: if_empty_same_as(url) unicode_safe + display_property: dcat:downloadURL + display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that provides a direct link to a downloadable file (defaults to the standard resource URL).' + es: 'URL que proporciona un enlace directo a un archivo descargable (por defecto es la URL de recursos estándar).' + form_group_id: resource_url + +# Access services (O). Dictionariy. +- field_name: access_services + label: + en: Access services + es: Servicios de acceso + repeating_label: + en: Access service + es: Servicio de acceso + display_property: dcat:downloadURL + repeating_subfields: + - field_name: uri + label: + en: Access service URI + es: URI del servicio de acceso + display_snippet: schemingdcat/display_snippets/link_schema.html + - field_name: title + label: + en: Access service title + es: Título del servicio de acceso + - field_name: endpoint_description + label: + en: Endpoint description + es: Descripción del punto final + - field_name: endpoint_url + label: + en: Endpoint URL + es: URL del punto final + preset: multiple_text_links + - field_name: serves_dataset + label: + en: Serves dataset + es: Sirve los conjuntos de datos + preset: multiple_text_links + help_text: + en: 'A data service that gives access to the resource.' + es: 'Un servicio de datos que da acceso al recurso.' + form_group_id: resource_access_service + +#FIX: Resource title (M) -- name_translated field dont work +- field_name: name + label: + en: Distribution title + es: Título de la distribución + form_placeholder: + en: e.g. Web Map Service + es: ej. Web Map Service + display_property: dct:title + form_group_id: resource_title + +#FIX: Resource abstract (M) -- description_translated field dont work +- field_name: description + label: + en: Distribution abstract + es: Descripción de la distribución + form_snippet: markdown.html + form_placeholder: + en: Some useful notes about the data. + es: Algunas notas útiles sobre los datos. + display_property: dct:description + form_group_id: resource_notes + +# Date of creation (M) +- field_name: created + label: + en: Date of creation + es: Fecha de creación + display_property: dct:created + preset: date_created + form_group_id: resource_identification + +# Date of last revision (M) +- field_name: modified + label: + en: Date of last revision + es: Fecha de última modificación + display_property: dct:modified + preset: date_modified + form_group_id: resource_identification + +# Resource character encoding (C) +- field_name: hash + label: + en: Hash + es: Hash + display_property: spdx:checksumValue + form_placeholder: 4304cf2e751e6053c90b1804c89c0ebb758f395a + help_text: + en: 'Checksum of the downloaded file.' + es: 'Suma de comprobación del fichero descargado.' + form_group_id: resource_identification + +# Resource character encoding (C) +- field_name: hash_algorithm + label: + en: Hash Algorithm + es: Algoritmo Hash + display_property: spdx:Checksum + form_placeholder: http://spdx.org/rdf/terms#checksumAlgorithm_sha1 + help_text: + en: 'Algorithm used to calculate to checksum.' + es: 'Algoritmo utilizado para calcular la suma de comprobación.' + form_group_id: resource_identification + +# Resource status (O) +- field_name: availability + label: + en: Resource availability + es: Disponibilidad de la distribución + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: dcatap:availability + form_include_blank_choice: False + choices: + - label: + en: Available + es: Disponible + value: http://publications.europa.eu/resource/authority/planned-availability/AVAILABLE + - label: + en: Stable + es: Estable + value: http://publications.europa.eu/resource/authority/planned-availability/STABLE + - label: + en: Experimental + es: Experimental + value: http://publications.europa.eu/resource/authority/planned-availability/EXPERIMENTAL + - label: + en: Provisional data + es: Datos provisionales + value: http://publications.europa.eu/resource/authority/planned-availability/OP_DATPRO + - label: + en: Temporary + es: Temporal + value: http://publications.europa.eu/resource/authority/planned-availability/TEMPORARY + help_text: + en: 'This property indicates how long it is planned to keep the Distribution of the Dataset available acording to Distribution availability vocabulary.' + es: 'Esta propiedad indica durante cuánto tiempo se prevé mantener disponible la distribución del conjunto de datos de acuerdo con el Vocabulario de disponibilidad de la distribución.' + help_allow_html: True + form_group_id: resource_lineage + +# Resource format (O) +- field_name: format + label: + en: Format + es: Formato + preset: resource_format_autocomplete + display_property: dct:format + form_group_id: resource_distribution + +# Media type (O) +- field_name: mimetype + label: + en: Media type + es: Tipo de medio + display_snippet: schemingdcat/display_snippets/link.html + display_property: dct:MediaType + form_placeholder: http://www.iana.org/assignments/media-types/application/vnd.shp + help_text: + en: 'This property refers to the media type of the Distribution as defined in the official register of media types (IANA)' + es: 'Esta propiedad se refiere al tipo de medio de la Distribución tal y como se define en el registro oficial de tipos de medios (IANA)' + help_allow_html: True + form_group_id: resource_distribution + +# Compress format (O) +- field_name: compress_format + label: + en: Compress format + es: Formato comprimido + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:compressFormat + form_placeholder: http://www.iana.org/assignments/media-types/application/gzip + help_text: + en: 'The format of the file in which the data is contained in a compressed form.' + es: 'Formato del archivo en el que los datos están contenidos de forma comprimida.' + form_group_id: resource_distribution + +# Package format (O) +- field_name: package_format + label: + en: Package format + es: Formato del paquete + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:packageFormat + form_placeholder: http://publications.europa.eu/resource/authority/file-type/TAR + help_text: + en: 'The format of the file in which one or more data files are grouped together.' + es: 'Formato del fichero en el que se agrupan uno o varios ficheros de datos.' + form_group_id: resource_distribution + +# Resource status (O) +- field_name: status + label: + en: Resource status + es: Estado de la distribución + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: adms:status + form_include_blank_choice: False + choices: + - label: + en: Completed + es: Completado + value: http://purl.org/adms/status/Completed + - label: + en: Under development + es: En desarrollo + value: http://purl.org/adms/status/UnderDevelopment + - label: + en: Deprecated + es: Obsoleto + value: http://purl.org/adms/status/Deprecated + - label: + en: Withdrawn + es: Retirado + value: http://purl.org/adms/status/Withdrawn + help_text: + en: 'This property refers to the maturity of the Distribution. It MUST take one of the values from the ADMS status list.' + es: 'Esta propiedad hace referencia a la madurez de la distribución y debe tomar uno de los valores de la lista ADMS status.' + help_allow_html: True + form_group_id: resource_type + +# Resource character encoding (C) +- field_name: encoding + label: + en: Character encoding + es: Codificación + display_property: cnt:characterEncoding + form_placeholder: UTF-8 + help_text: + en: 'Character encoding in ISO-19115 metadata is specified with a code list that can be mapped to the corresponding codes in [IANA-CHARSETS]' + es: 'La codificación de caracteres en los metadatos ISO-19115 se especifica con una lista de códigos que puede asignarse a los códigos correspondientes en [IANA-CHARSETS].' + help_allow_html: True + form_group_id: resource_type + +# Byte size (O) +- field_name: size + label: + en: Byte size + es: Tamaño en bytes + form_placeholder: 305000 + preset: file_size + display_property: dcat:byteSize + help_text: + en: 'Integer value.' + es: 'Valor entero.' + form_group_id: resource_type + +# Resource language (M) +- field_name: language + label: + en: Resource language + es: Idioma de la distribución + preset: select + display_property: dct:language + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Spanish + es: Español + value: http://publications.europa.eu/resource/authority/language/SPA + - label: + en: English + es: Inglés + value: http://publications.europa.eu/resource/authority/language/ENG + - label: + en: German + es: Alemán + value: http://publications.europa.eu/resource/authority/language/DEU + - label: + en: French + es: Francés + value: http://publications.europa.eu/resource/authority/language/FRA + - label: + en: Italian + es: Italiano + value: http://publications.europa.eu/resource/authority/language/ITA + - label: + en: Dutch + es: Neerlandés + value: http://publications.europa.eu/resource/authority/language/NLD + - label: + en: Danish + es: Danés + value: http://publications.europa.eu/resource/authority/language/DAN + - label: + en: Greek + es: Griego + value: http://publications.europa.eu/resource/authority/language/ELL + - label: + en: Portuguese + es: Portugués + value: http://publications.europa.eu/resource/authority/language/POR + - label: + en: Finnish + es: Finés + value: http://publications.europa.eu/resource/authority/language/FIN + - label: + en: Swedish + es: Sueco + value: http://publications.europa.eu/resource/authority/language/SWE + - label: + en: Czech + es: Checo + value: http://publications.europa.eu/resource/authority/language/CES + - label: + en: Estonian + es: Estonio + value: http://publications.europa.eu/resource/authority/language/EST + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Hungarian + es: Húngaro + value: http://publications.europa.eu/resource/authority/language/HUN + - label: + en: Latvian + es: Letón + value: http://publications.europa.eu/resource/authority/language/LAV + - label: + en: Lithuanian + es: Lituano + value: http://publications.europa.eu/resource/authority/language/LIT + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Polish + es: Polaco + value: http://publications.europa.eu/resource/authority/language/POL + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + - label: + en: Croatian + es: Croata + value: http://publications.europa.eu/resource/authority/language/HRV + - label: + en: Luxembourgish + es: Luxemburgués + value: http://publications.europa.eu/resource/authority/language/LTZ + - label: + en: Slovak + es: Eslovaco + value: http://publications.europa.eu/resource/authority/language/SLK + - label: + en: Slovene + es: Esloveno + value: http://publications.europa.eu/resource/authority/language/SLV + - label: + en: Maltese + es: Maltés + value: http://publications.europa.eu/resource/authority/language/MLT + - label: + en: Romanian + es: Rumano + value: http://publications.europa.eu/resource/authority/language/ROM + - label: + en: Bulgarian + es: Búlgaro + value: http://publications.europa.eu/resource/authority/language/BUL + - label: + en: Irish + es: Irlandés + value: http://publications.europa.eu/resource/authority/language/GLE + form_group_id: resource_identification + +# Additional format information (O) +##TODO: To profiles.py +- field_name: resource_relation + label: + en: Additional format information + es: Información adicional sobre el formato + preset: multiple_text_raws_ordered + form_placeholder: 'http://www.catastro.minhap.es/ayuda/lang/castellano/ayuda_descarga_shape.htm' + help_text: + en: 'Link(s) related to the format, where the format, the scheme used for its representation or other technical information on how to access the documents or information resources is indicated.' + es: 'Enlace(s) relacionado(s) con el formato, en dónde se indica el formato, el esquema utilizado para su representación u otra información técnica sobre cómo acceder a los documentos o recursos de información.' + form_group_id: resource_relations + +# Additional format information (O) +- field_name: documentation + label: + en: Documentation + es: Documentación + preset: multiple_text_raws_ordered + validators: ignore_missing scheming_multiple_text + form_placeholder: 'https://example.org/some-doc.html' + help_text: + en: 'A page or document about this resource.' + es: 'Una página o documento sobre este recurso.' + form_group_id: resource_relations + +# Resource License (R) +- field_name: license + label: + en: Distribution license + es: Licencia de la distribución + display_property: dct:license + form_placeholder: + en: e.g. http://creativecommons.org/licenses/by/4.0/ + es: ej. http://creativecommons.org/licenses/by/4.0/ + help_text: + en: 'License definitions and additional information can be found at: Open Definition' + es: 'Las definiciones de las licencias y la información adicional pueden encontrarse en: Open Definition' + help_allow_html: True + form_group_id: resource_license_info + +# Resource limitations on public access (M) +- field_name: rights + label: + en: Resource access Rights + es: Derechos de acceso del recurso + preset: select + display_snippet: schemingdcat/display_snippets/link_schema.html + display_property: dct:accessRights + form_include_blank_choice: False + choices: + - label: + en: Confidential + es: Confidencial + value: http://publications.europa.eu/resource/authority/access-right/CONFIDENTIAL + - label: + en: Non-public + es: No público + value: http://publications.europa.eu/resource/authority/access-right/NON_PUBLIC + - label: + en: Normal + es: Normal + value: http://publications.europa.eu/resource/authority/access-right/NORMAL + - label: + en: Public + es: Público + value: http://publications.europa.eu/resource/authority/access-right/PUBLIC + - label: + en: Restricted + es: Restringido + value: http://publications.europa.eu/resource/authority/access-right/RESTRICTED + - label: + en: Sensitive + es: Sensible + value: http://publications.europa.eu/resource/authority/access-right/SENSITIVE + help_text: + en: 'Name authority list Access right (EU Vocabs)' + es: 'Lista de autoridades Derechos de acceso (EU Vocabs)' + help_allow_html: True + form_group_id: resource_license_info + +# Conformity (M) +- field_name: conforms_to + label: + en: Conformity + es: Conformidad + preset: multiple_text_links + display_property: dct:conformsTo + form_placeholder: 'http://www.opengeospatial.org/standards/wms' + help_text: + en: 'Specification (e.g. OGC). URLs' + es: 'Especificaciones (e.g. OGC). URLs' + form_group_id: resource_standards + +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: resource_standards + +# Coordinate Reference System (C) +- field_name: reference_system + label: + en: Coordinate Reference System + es: Sistema de Referencia de Coordenadas + validators: ignore_missing schemingdcat_valid_url + display_snippet: schemingdcat/display_snippets/link_epsg.html + form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 + help_text: + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + help_allow_html: True + form_group_id: resource_standards + +# Lineage statement (O) +##TODO: provenance + +# Lineage process steps (O) +##TODO: lineage_process_steps diff --git a/ckanext/schemingdcat/schemas/dcatap/dcatap_group.json b/ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_group.json similarity index 100% rename from ckanext/schemingdcat/schemas/dcatap/dcatap_group.json rename to ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_group.json diff --git a/ckanext/schemingdcat/schemas/dcatap/dcatap_org.json b/ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_org.json similarity index 100% rename from ckanext/schemingdcat/schemas/dcatap/dcatap_org.json rename to ckanext/schemingdcat/schemas/dcat_ap/eu_dcat_ap_org.json diff --git a/ckanext/schemingdcat/schemas/default_presets.json b/ckanext/schemingdcat/schemas/default_presets.json index 666776b..14a0c28 100644 --- a/ckanext/schemingdcat/schemas/default_presets.json +++ b/ckanext/schemingdcat/schemas/default_presets.json @@ -53,6 +53,13 @@ "display_snippet": "schemingdcat/display_snippets/link.html" } }, + { + "preset_name": "valid_url_dependent_fields", + "values": { + "validators": "ignore_missing schemingdcat_valid_url schemingdcat_fill_dependent_fields", + "display_snippet": "schemingdcat/display_snippets/link.html" + } + }, { "preset_name": "dataset_organization", "values": { @@ -98,6 +105,22 @@ "validators": "scheming_required scheming_choices" } }, + { + "preset_name": "select_not_empty", + "values": { + "form_snippet": "select.html", + "display_snippet": "select.html", + "validators": "not_empty scheming_required scheming_choices" + } + }, + { + "preset_name": "select_dependent_fields", + "values": { + "form_snippet": "select.html", + "display_snippet": "select.html", + "validators": "scheming_required scheming_choices schemingdcat_fill_dependent_fields" + } + }, { "preset_name": "multiple_checkbox", "values": { @@ -141,6 +164,23 @@ "validators": "scheming_required isodate convert_to_json_if_date" } }, + { + "preset_name": "date_dependent_fields", + "values": { + "form_snippet": "date.html", + "display_snippet": "schemingdcat/display_snippets/date_localised.html", + "validators": "scheming_required isodate convert_to_json_if_date schemingdcat_fill_dependent_fields" + } + }, + { + "preset_name": "date_dcatap", + "values": { + "form_snippet": "date.html", + "display_snippet": "schemingdcat/display_snippets/date_localised.html", + "validators": "ignore_missing isodate convert_to_json_if_date" + } + }, + { "preset_name": "date_modified", "values": { @@ -206,6 +246,14 @@ "validators": "ignore_missing" } }, + { + "preset_name": "select_spatial_icon_dependent_fields", + "values": { + "form_snippet": "schemingdcat/form_snippets/select_spatial_uri.html", + "display_snippet": "schemingdcat/display_snippets/select_spatial_icon.html", + "validators": "ignore_missing schemingdcat_fill_spatial_uri_dependent_fields" + } + }, { "preset_name": "multiple_choice_icon", "values": { @@ -273,6 +321,23 @@ "validators": "schemingdcat_spatial_uri_validator ignore_missing schemingdcat_valid_json_object" } }, + { + "preset_name": "spatial_dependent_fields", + "values": { + "form_snippet": "json.html", + "display_snippet": "schemingdcat/display_snippets/spatial_json.html", + "validators": "schemingdcat_spatial_uri_validator ignore_missing schemingdcat_valid_json_object schemingdcat_fill_spatial_dependent_fields" + } + }, + + { + "preset_name": "hide_spatial_coverage", + "values": { + "form_snippet": null, + "display_snippet": null, + "validators": "schemingdcat_spatial_coverage_validator" + } + }, { "preset_name": "schemingdcat_identifier", "values": { @@ -380,6 +445,13 @@ "validators": "ignore" } }, + { + "preset_name": "hide_fallback", + "values": { + "form_snippet": null, + "display_snippet": null + } + }, { "preset_name": "file_size", "values": { @@ -394,6 +466,13 @@ "validators": "ignore_missing schemingdcat_valid_email", "display_snippet": "email.html" } + }, + { + "preset_name": "schemingdcat_valid_email_dependent_fields", + "values": { + "validators": "ignore_missing schemingdcat_valid_email schemingdcat_fill_dependent_fields", + "display_snippet": "email.html" + } } ] } diff --git a/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml b/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_full.yaml similarity index 85% rename from ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml rename to ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_full.yaml index b53e9bf..9f48f7e 100644 --- a/ckanext/schemingdcat/schemas/geodcatap_es/geodcatap_es_dataset.yaml +++ b/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_full.yaml @@ -1,14 +1,16 @@ scheming_version: 2 dataset_type: dataset -about: "Datasets/Distributions: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (2.0.0) with ISO-19115 (INSPIRE) mandatory elements. Spanish context NTI-RISP: http://www.boe.es/eli/es/res/2013/02/19/(4)/con" +about: "Datasets/Distributions: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (3.0.0) with ISO-19115 (INSPIRE) mandatory elements. Spanish context NTI-RISP: http://www.boe.es/eli/es/res/2013/02/19/(4)/con" about_url: https://github.com/mjanez/ckanext-schemingdcat form_languages: ["es", "en"] required_language: "es" -schema_version: 2.1 -schema_date: 2024-05-01 -schema_name: geodcatap_es +schema_version: 3.0 +schema_date: 2024-08-01 +schema_name: es_geodcat_ap_full schema_title: GeoDCAT-AP (ES) schema_description: "Geospatial extension to the DCAT application profile for data portals in Europe (GeoDCAT-AP). It is adapted to the Spanish context and includes compatibility with the Technical Interoperability Standard (NTI-RISP), the open data profile for Spain: https://datos.gob.es/en/documentacion/guia-de-aplicacion-de-la-norma-tecnica-de-interoperabilidad-de-reutilizacion-de" +schema_profile_version: 3.0.0 +schema_profile_url: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0 schema_form_groups: # Basic Info parties form_page (#1) - form_group_id: title @@ -56,18 +58,18 @@ schema_form_groups: label: en: Author information es: Información del autor - fa_icon: fa-pencil-square-o + fa_icon: fa-pencil-square # Quality form_page (#3) - form_group_id: standards label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square - form_group_id: temporal_info label: en: Timing es: Información temporal - fa_icon: fa-clock-o + fa_icon: fa-clock - form_group_id: lineage label: en: Provenance information @@ -120,12 +122,21 @@ schema_form_groups: label: en: Resource locator es: Localizador del recurso - fa_icon: fa-link + - form_group_id: resource_access_service + label: + en: Data Service of the resource + es: Servicio de datos del recurso + fa_icon: fa-asterisk + - form_group_id: resource_distribution + label: + en: Information on resource distribution + es: Información de la distribución del recurso + fa_icon: fa-list-ul - form_group_id: resource_type label: en: Resource type information es: Información del tipo de recurso - fa_icon: fa-file-code-o + fa_icon: fa-file-code - form_group_id: resource_license_info label: en: License and restrictions @@ -140,35 +151,47 @@ schema_form_groups: label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square + - form_group_id: resource_relations + label: + en: Related resources + es: Recursos relacionados + fa_icon: fa-code-fork schema_form_tabs: + # Dataset tabs - form_tab: basic_tab + tab_type: dataset_fields label: en: Identification es: Identificación form_group_id: + - title - general_info - identification - notes - form_tab: vocabs_tab + tab_type: dataset_fields label: en: Vocabs es: Vocabularios form_group_id: - vocabs - form_tab: contact_tab + tab_type: dataset_fields label: en: Contact point - es: Punto de Contacto + es: Punto de contacto form_group_id: - contact - form_tab: publisher_tab + tab_type: dataset_fields label: en: Publisher es: Publicador form_group_id: - publisher - form_tab: responsible_parties_tab + tab_type: dataset_fields label: en: Responsible parties es: Responsables @@ -176,6 +199,7 @@ schema_form_tabs: - maintainer - author - form_tab: quality_tab + tab_type: dataset_fields label: en: Quality es: Calidad @@ -183,6 +207,7 @@ schema_form_tabs: - standards - temporal_info - form_tab: lineage_tab + tab_type: dataset_fields label: en: Lineage es: Linaje @@ -190,6 +215,7 @@ schema_form_tabs: - lineage - purpose - form_tab: spatial_tab + tab_type: dataset_fields label: en: Spatial es: Espacial @@ -197,12 +223,55 @@ schema_form_tabs: - spatial_info - inspire - form_tab: license_tab + tab_type: dataset_fields label: en: License es: Licencia form_group_id: - license_info - version_notes + # Distribution tabs + - form_tab: resource_basic_tab + tab_type: resource_fields + label: + en: Identification + es: Identificación + form_group_id: + - resource_title + - resource_url + - resource_notes + - resource_identification + - form_tab: resource_distribution + tab_type: resource_fields + label: + en: Distribution + es: Distribución + form_group_id: + - resource_distribution + - resource_type + - resource_access_service + - form_tab: resource_lineage_tab + tab_type: resource_fields + label: + en: Lineage + es: Linaje + form_group_id: + - resource_lineage + - resource_relations + - form_tab: resource_quality_tab + tab_type: resource_fields + label: + en: Quality + es: Calidad + form_group_id: + - resource_standards + - form_tab: resource_license_tab + tab_type: resource_fields + label: + en: License + es: Licencia + form_group_id: + - resource_license_info ### Codes in Schema # (M): Mandatory @@ -213,17 +282,8 @@ schema_form_tabs: #--Dataset (dcat:Dataset) fields--# dataset_fields: -#--Basic info--# -- start_form_page: - title: - en: Basic Info - es: Identificación - description: - en: Basic metadata identification and reference information. - es: Información básica de identificación y referencia de los metadatos. - # Dataset title translated (M) - field_name: title_translated +- field_name: title_translated label: en: Dataset title es: Título del conjunto de datos @@ -258,7 +318,7 @@ dataset_fields: es: 'ckanext-schemingdcat cosechador de ficheros remotos Google Sheet/Onedrive Excel/a>' form_group_id: general_info -# Non-spatial Dataset +# Non-spatial Dataset (Hidden field, based on dcat_type) - field_name: dataset_scope label: en: Scope of the data @@ -335,9 +395,8 @@ dataset_fields: label: en: Resource type es: Tipo de recurso - preset: select + preset: select_not_empty form_include_blank_choice: False - validators: not_empty scheming_required required: True display_property: dct:type display_snippet: schemingdcat/display_snippets/link_schema.html @@ -863,11 +922,10 @@ dataset_fields: label: en: Metadata language es: Idioma de los metadatos - preset: select + preset: select_not_empty display_property: dct:language display_snippet: schemingdcat/display_snippets/link_schema.html form_include_blank_choice: False - validators: not_empty scheming_required required: True sorted_choices: True choices: @@ -1003,10 +1061,6 @@ dataset_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano @@ -1064,11 +1118,10 @@ dataset_fields: label: en: ISO 19115 topic category es: Categoría temática ISO 19115 - preset: select + preset: select_not_empty display_property: dcat:keyword display_snippet: schemingdcat/display_snippets/link_schema.html form_include_blank_choice: False - validators: not_empty scheming_required required: True sorted_choices: True choices: @@ -1110,7 +1163,6 @@ dataset_fields: value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/transportation - label: utilitiesCommunication value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/utilitiesCommunication - help_text: en: 'e.g. Labels from Metadata code list register (INSPIRE)' es: 'ej: Etiquetas del Registro de listas controladas de metadatos (INSPIRE)' @@ -1148,12 +1200,16 @@ dataset_fields: es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' form_group_id: vocabs -# TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py # Metadata point of contact URI (M) - field_name: contact_uri label: en: URI of the Metadata contact point es: URI del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields display_snippet: schemingdcat/display_snippets/link_name.html form_placeholder: http://orgs.vocab.org/some-org form_group_id: contact @@ -1163,6 +1219,11 @@ dataset_fields: label: en: Metadata contact point name es: Nombre del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields display_property: dcat:contactPoint form_placeholder: José Blanco form_group_id: contact @@ -1172,7 +1233,11 @@ dataset_fields: label: en: Metadata contact point email es: Email del punto de contacto de los Metadatos - validators: not_empty scheming_required schemingdcat_valid_email + dependent_fields: + field_name: contact + subfields: + - field_name: email + validators: not_empty scheming_required schemingdcat_valid_email schemingdcat_fill_dependent_fields required: True display_property: vcard:hasEmail display_snippet: email.html @@ -1184,27 +1249,145 @@ dataset_fields: label: en: Website of the Metadata contact point es: Web del punto de contacto de los metadatos - preset: valid_url + dependent_fields: + field_name: contact + subfields: + - field_name: url + preset: valid_url_dependent_fields display_property: vcard:hasURL form_placeholder: http://www.example.com form_group_id: contact -#--Responsible party--# -- start_form_page: - title: - en: Responsible party - es: Responsable - description: - en: Organization(s) responsible for the creation, management, maintenance and distribution of datasets. - es: Organización(es) responsable(s) de la creación, gestión, mantenimiento y distribución de los conjuntos de datos. - -# Publisher name (M) - field_name: publisher_name +# GeoDCAT-AP: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact +- field_name: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + display_property: dcat:hadRole + dependent_fields: + field_name: contact + subfields: + - field_name: role + preset: select_dependent_fields + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Resource Provider + es: Proveedor de recursos + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/resourceProvider + geodcatap: geodcatap:resourceProvider + - label: + en: Custodian + es: Custodio + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/custodian + geodcatap: geodcatap:custodian + - label: + en: Owner + es: Propietario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/owner + geodcatap: dct:rightsHolder + - label: + en: User + es: Usuario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/user + geodcatap: geodcatap:user + - label: + en: Distributor + es: Distribuidor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/distributor + geodcatap: geodcatap:distributor + - label: + en: Originator + es: Originador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/originator + geodcatap: geodcatap:originator + - label: + en: Point of Contact + es: Punto de contacto + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/pointOfContact + geodcatap: dcat:contactPoint + - label: + en: Principal Investigator + es: Investigador principal + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/principalInvestigator + geodcatap: geodcatap:principalInvestigator + - label: + en: Processor + es: Procesador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/processor + geodcatap: geodcatap:processor + - label: + en: Publisher + es: Editor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/publisher + geodcatap: dct:publisher + - label: + en: Author + es: Autor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/author + geodcatap: dct:creator + form_group_id: contact + + +# TO MIGRATE: contact dict. Filling with contact_* values +- field_name: contact + label: + en: Contact points + es: Puntos de contacto + repeating_label: + en: Contact point + es: Punto de contacto + form_snippet: null + display_snippet: null + repeating_subfields: + - field_name: uri + legacy: contact_uri + label: + en: URI of the Metadata contact point + es: URI del punto de contacto de los metadatos + + - field_name: name + legacy: contact_name + label: + en: Metadata contact point name + es: Nombre del punto de contacto de los metadatos + + - field_name: email + legacy: contact_email + label: + en: Metadata contact point email + es: Email del punto de contacto de los Metadatos + + - field_name: url + legacy: contact_url + label: + en: Website of the Metadata contact point + es: Web del punto de contacto de los metadatos + + - field_name: role + legacy: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + + help_text: + en: 'Contact information for enquiries about the dataset.' + es: 'Información de contacto para consultas sobre el conjunto de datos.' + form_group_id: contact + + +# GeoDCAT-AP: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact +- field_name: publisher_name label: en: Name of the publisher es: Nombre del publicador display_property: foaf:name form_placeholder: José Blanco + dependent_fields: + field_name: publisher + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields help_text: en: "A party that makes a dataset available to others." es: "Persona u organización que pone a disposición de otros el conjunto de datos." @@ -1215,6 +1398,11 @@ dataset_fields: label: en: Identifier of the publisher es: Identificador del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: identifier + validators: schemingdcat_fill_dependent_fields display_property: dct:identifier form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 help_text: @@ -1228,6 +1416,11 @@ dataset_fields: label: en: URI of the publisher es: URI del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields display_snippet: schemingdcat/display_snippets/link_name.html form_snippet: schemingdcat/form_snippets/publisher_uri.html form_placeholder: http://orgs.vocab.org/some-org @@ -1241,7 +1434,11 @@ dataset_fields: label: en: Email of the publisher es: Email del publicador - preset: schemingdcat_valid_email + dependent_fields: + field_name: publisher + subfields: + - field_name: email + preset: schemingdcat_valid_email_dependent_fields display_property: foaf:mbox form_placeholder: joseblanco@example.com form_group_id: publisher @@ -1253,7 +1450,11 @@ dataset_fields: es: Web del publicador display_property: foaf:homepage form_placeholder: http://www.example.com - preset: valid_url + dependent_fields: + field_name: publisher + subfields: + - field_name: url + preset: valid_url_dependent_fields help_text: en: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL @@ -1264,7 +1465,11 @@ dataset_fields: label: en: Type of the publisher es: Tipo de publicador - preset: select + dependent_fields: + field_name: publisher + subfields: + - field_name: type + preset: select_dependent_fields display_property: dct:type display_snippet: schemingdcat/display_snippets/link_schema.html choices: @@ -1314,6 +1519,56 @@ dataset_fields: value: http://purl.org/adms/publishertype/StandardisationBody form_group_id: publisher +# TO MIGRATE: Publisher dict. Filling with publisher_* values +- field_name: publisher + label: + en: Publisher + es: Publicador + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: publisher_uri + label: + en: URI of the publisher + es: URI del publicador + + - field_name: name + legacy: publisher_name + label: + en: URI + es: URI + + - field_name: email + legacy: publisher_email + label: + en: Email of the publisher + es: Email del publicador + + - field_name: identifier + legacy: publisher_identifier + label: + en: Identifier of the publisher + es: Identificador del publicador + + - field_name: url + legacy: publisher_url + label: + en: Website of the publisher + es: Web del publicador + + - field_name: type + legacy: publisher_type + label: + en: Type of the publisher + es: Tipo de publicador + + help_text: + en: 'Entity responsible for making the dataset available.' + es: 'Entidad responsable de la puesta a disposición del conjunto de datos.' + form_group_id: publisher + # Maintainer name (O) - field_name: maintainer label: @@ -1326,6 +1581,15 @@ dataset_fields: es: "Persona u organización responsable de mantener o actualizar un conjunto de datos." form_group_id: maintainer +# Maintainer name (O). Fallback, CKAN using maintainer in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: maintainer_name + label: + en: Name of the dataset maintainer + es: Nombre del mantenedor + validators: if_empty_same_as(maintainer) unicode_safe + preset: hide_fallback + form_group_id: maintainer + # Maintainer Identifier (O) - field_name: maintainer_uri label: @@ -1374,6 +1638,15 @@ dataset_fields: es: "Persona u organización creadora o productora de un conjunto de datos" form_group_id: author +# Author name (O). Fallback, CKAN using author in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: author_name + label: + en: Name of the dataset author + es: Nombre del mantenedor + validators: if_empty_same_as(author) unicode_safe + preset: hide_fallback + form_group_id: author + # Author Identifier (O) - field_name: author_uri label: @@ -1410,17 +1683,8 @@ dataset_fields: es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL form_group_id: author -#--Quality--# -- start_form_page: - title: - en: Quality - es: Calidad - description: - en: Data quality information. - es: Información sobre calidad de los datos. - # Other identifier (O)) - field_name: alternate_identifier +- field_name: alternate_identifier label: en: Other identifier es: Identificador alternativo @@ -1467,19 +1731,36 @@ dataset_fields: required: False display_property: dct:conformsTo preset: multiple_metadata_profiles - form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/2.0.0' + form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/3.0.0' help_text: en: 'URI(s) of the Metadata profile used' es: 'URI(s) del perfil de Metadatos utilizado' form_group_id: standards +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: standards + # Temporal start (O) - field_name: temporal_start label: en: Temporal extent (Start) es: Cobertura temporal (Inicio) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: start display_property: dct:temporal - preset: date + preset: date_dependent_fields form_group_id: temporal_info # Temporal end (O) @@ -1487,8 +1768,38 @@ dataset_fields: label: en: Temporal extent (End) es: Cobertura temporal (Fin) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: end display_property: dct:temporal - preset: date + preset: date_dependent_fields + form_group_id: temporal_info + +# TO MIGRATE: Temporal coverage dict. Filling with temporal_* values +- field_name: temporal_coverage + label: + en: Temporal coverage + es: Cobertura temporal + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: start + legacy: temporal_start + label: + en: Temporal extent (Start) + es: Cobertura temporal (Inicio) + + - field_name: end + legacy: temporal_end + label: + en: Temporal extent (End) + es: Cobertura temporal (Fin) + + help_text: + en: The temporal period or periods the dataset covers. + es: Periodo o periodos temporales que abarca el conjunto de datos. form_group_id: temporal_info # Update frequency (O) @@ -1670,6 +1981,19 @@ dataset_fields: es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' form_group_id: lineage +# Related resources (O) +- field_name: is_referenced_by + label: + en: Is referenced by + es: Es referenciado por + preset: multiple_text_links + display_property: dct:isReferencedBy + form_placeholder: 'http://example.org/catalog/dataset/ejemplo' + help_text: + en: 'A related resource, such as a publication, that references, cites, or otherwise points to the dataset.' + es: 'Un recurso relacionado, como una publicación, que referencia, cita o de otro modo apunta al conjunto de datos.' + form_group_id: lineage + # Purpose (O) - field_name: purpose label: @@ -1697,20 +2021,19 @@ dataset_fields: form_group_id: standards ##TODO: temporal_resolution -## ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i - - -#--Spatial--# -- start_form_page: - title: - en: Spatial info - es: Espacial - description: - en: Spatial capabilities information. - es: Información sobre las capacidades espaciales. +## Add codelist or validator to check ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i +- field_name: temporal_resolution + label: + en: Temporal resolution + es: Resolución Temporal + help_text: + en: 'Minimum time period resolvable in the dataset,[ISO 8601].' + es: 'Período de tiempo mínimo resoluble en el conjunto de datos, ISO 8601., [ISO 8601].' + help_allow_html: True + form_group_id: standards # INSPIRE Themes (M) - field_name: theme +- field_name: theme label: en: INSPIRE Themes es: Temas INSPIRE @@ -1883,8 +2206,8 @@ dataset_fields: display_snippet: schemingdcat/display_snippets/link_epsg.html form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 help_text: - en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' - es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' help_allow_html: True form_group_id: inspire @@ -1893,7 +2216,13 @@ dataset_fields: label: en: Bounding Box es: Extensión espacial - preset: spatial + preset: spatial_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: bbox + - field_name: geom + - field_name: centroid form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' help_text: en: 'If a Geographic identifier is selected and this element is empty, it will be filled in automatically.Draw BBox and copy GEOJSON with "coordinates" value.. e.g. {"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}
Only "geometry" dict with "type" and "coordinates" elements. More information at GeoJSON bounding boxes.' @@ -1906,7 +2235,12 @@ dataset_fields: label: en: Geographic identifier es: Identificador geográfico - preset: select_spatial_icon + preset: select_spatial_icon_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: uri + - field_name: text display_property: dcat:theme select_size: 10 sorted_choices: False @@ -2557,6 +2891,58 @@ dataset_fields: help_allow_html: True form_group_id: spatial_info +# TO MIGRATE: Geographic bounding box dict. Filling with spatial_* values +- field_name: spatial_coverage + label: + en: Spatial coverage + es: Cobertura espacial + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: spatial_uri + label: + en: URI + es: URI + + - field_name: text + legacy: spatial_uri + label: + en: Label + es: Etiqueta + form_placeholder: 'España' + + - field_name: geom + legacy: spatial_geom + label: + en: Geometry + es: Geometría + form_placeholder: '{"type": "Polygon", "coordinates": [[[11.9936, 54.0486], [11.9936, 54.2466], [12.3045, 54.2466], [12.3045, 54.0486], [11.9936, 54.0486]]]}' + validators: schemingdcat_valid_json_object + + - field_name: bbox + legacy: spatial + label: + en: Bounding Box + es: Extensión espacial + form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' + validators: schemingdcat_valid_json_object + + - field_name: centroid + legacy: spatial_centroid + label: + en: Centroid + es: Centroide + form_placeholder: '{"type": "Point", "coordinates": [1.5, 1.5]}' + validators: schemingdcat_valid_json_object + + help_text: + en: 'A geographic region that is covered by the dataset.' + es: 'Región geográfica que abarca el conjunto de datos.' + form_group_id: spatial_info + + # Spatial representation type (O) - field_name: representation_type label: @@ -2609,17 +2995,8 @@ dataset_fields: es: Especifique la resolución espacial como distancia en metros form_group_id: inspire -#--License--# -- start_form_page: - title: - en: License info - es: Licencia - description: - en: Information on licenses and restrictions on use and access. - es: Información sobre licencias y restricciones de uso y acceso. - # License URI (M) - field_name: license_id +- field_name: license_id label: en: License es: Licencia @@ -2726,14 +3103,78 @@ resource_fields: # Access URL (M) - field_name: url + label: + en: URL + es: URL + preset: resource_url_upload + display_snippet: schemingdcat/display_snippets/link.html + form_group_id: resource_url + +# Access URL (M). Hide, falls back to the standard resource url field +- field_name: access_url label: en: Access URL es: URL de acceso - preset: resource_url_upload + validators: if_empty_same_as(url) unicode_safe + form_snippet: null display_property: dcat:accessURL display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that gives access to the dataset (defaults to the standard resource URL).' + es: 'URL que da acceso al conjunto de datos (por defecto es la URL de recursos estándar).' + form_group_id: resource_url + +# Access URL (M). Falls back to the standard resource url field +- field_name: download_url + label: + en: Download URL + es: URL de descarga + validators: if_empty_same_as(url) unicode_safe + display_property: dcat:downloadURL + display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that provides a direct link to a downloadable file (defaults to the standard resource URL).' + es: 'URL que proporciona un enlace directo a un archivo descargable (por defecto es la URL de recursos estándar).' form_group_id: resource_url +# Access services (O). Dictionariy. +- field_name: access_services + label: + en: Access services + es: Servicios de acceso + repeating_label: + en: Access service + es: Servicio de acceso + display_property: dcat:downloadURL + repeating_subfields: + - field_name: uri + label: + en: Access service URI + es: URI del servicio de acceso + display_snippet: schemingdcat/display_snippets/link_schema.html + - field_name: title + label: + en: Access service title + es: Título del servicio de acceso + - field_name: endpoint_description + label: + en: Endpoint description + es: Descripción del punto final + - field_name: endpoint_url + label: + en: Endpoint URL + es: URL del punto final + preset: multiple_text_links + - field_name: serves_dataset + label: + en: Serves dataset + es: Sirve los conjuntos de datos + preset: multiple_text_links + help_text: + en: 'A data service that gives access to the resource.' + es: 'Un servicio de datos que da acceso al recurso.' + form_group_id: resource_access_service + #FIX: Resource title (M) -- name_translated field dont work - field_name: name label: @@ -2775,6 +3216,30 @@ resource_fields: preset: date_modified form_group_id: resource_identification +# Resource character encoding (C) +- field_name: hash + label: + en: Hash + es: Hash + display_property: spdx:checksumValue + form_placeholder: 4304cf2e751e6053c90b1804c89c0ebb758f395a + help_text: + en: 'Checksum of the downloaded file.' + es: 'Suma de comprobación del fichero descargado.' + form_group_id: resource_identification + +# Resource character encoding (C) +- field_name: hash_algorithm + label: + en: Hash Algorithm + es: Algoritmo Hash + display_property: spdx:Checksum + form_placeholder: http://spdx.org/rdf/terms#checksumAlgorithm_sha1 + help_text: + en: 'Algorithm used to calculate to checksum.' + es: 'Algoritmo utilizado para calcular la suma de comprobación.' + form_group_id: resource_identification + # Resource status (O) - field_name: availability label: @@ -2818,7 +3283,7 @@ resource_fields: es: Formato preset: resource_format_autocomplete display_property: dct:format - form_group_id: resource_type + form_group_id: resource_distribution # Media type (O) - field_name: mimetype @@ -2832,7 +3297,33 @@ resource_fields: en: 'This property refers to the media type of the Distribution as defined in the official register of media types (IANA)' es: 'Esta propiedad se refiere al tipo de medio de la Distribución tal y como se define en el registro oficial de tipos de medios (IANA)' help_allow_html: True - form_group_id: resource_type + form_group_id: resource_distribution + +# Compress format (O) +- field_name: compress_format + label: + en: Compress format + es: Formato comprimido + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:compressFormat + form_placeholder: http://www.iana.org/assignments/media-types/application/gzip + help_text: + en: 'The format of the file in which the data is contained in a compressed form.' + es: 'Formato del archivo en el que los datos están contenidos de forma comprimida.' + form_group_id: resource_distribution + +# Package format (O) +- field_name: package_format + label: + en: Package format + es: Formato del paquete + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:packageFormat + form_placeholder: http://publications.europa.eu/resource/authority/file-type/TAR + help_text: + en: 'The format of the file in which one or more data files are grouped together.' + es: 'Formato del fichero en el que se agrupan uno o varios ficheros de datos.' + form_group_id: resource_distribution # Resource status (O) - field_name: status @@ -2879,6 +3370,19 @@ resource_fields: help_allow_html: True form_group_id: resource_type +# Byte size (O) +- field_name: size + label: + en: Byte size + es: Tamaño en bytes + form_placeholder: 305000 + preset: file_size + display_property: dcat:byteSize + help_text: + en: 'Integer value.' + es: 'Valor entero.' + form_group_id: resource_type + # Resource language (M) - field_name: language label: @@ -3020,10 +3524,6 @@ resource_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano @@ -3038,19 +3538,6 @@ resource_fields: value: http://publications.europa.eu/resource/authority/language/GLE form_group_id: resource_identification -# Byte size (O) -- field_name: size - label: - en: Byte size - es: Tamaño en bytes - form_placeholder: 305000 - preset: file_size - display_property: dcat:byteSize - help_text: - en: 'Integer value.' - es: 'Valor entero.' - form_group_id: resource_type - # Additional format information (O) ##TODO: To profiles.py - field_name: resource_relation @@ -3062,7 +3549,20 @@ resource_fields: help_text: en: 'Link(s) related to the format, where the format, the scheme used for its representation or other technical information on how to access the documents or information resources is indicated.' es: 'Enlace(s) relacionado(s) con el formato, en dónde se indica el formato, el esquema utilizado para su representación u otra información técnica sobre cómo acceder a los documentos o recursos de información.' - form_group_id: resource_lineage + form_group_id: resource_relations + +# Additional format information (O) +- field_name: documentation + label: + en: Documentation + es: Documentación + preset: multiple_text_raws_ordered + validators: ignore_missing scheming_multiple_text + form_placeholder: 'https://example.org/some-doc.html' + help_text: + en: 'A page or document about this resource.' + es: 'Una página o documento sobre este recurso.' + form_group_id: resource_relations # Resource License (R) - field_name: license @@ -3144,6 +3644,19 @@ resource_fields: es: 'Especificaciones (e.g. OGC). URLs' form_group_id: resource_standards +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: resource_standards + # Coordinate Reference System (C) - field_name: reference_system label: @@ -3153,8 +3666,8 @@ resource_fields: display_snippet: schemingdcat/display_snippets/link_epsg.html form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 help_text: - en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' - es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' help_allow_html: True form_group_id: resource_standards diff --git a/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_group.json b/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_group.json new file mode 100644 index 0000000..b172a5b --- /dev/null +++ b/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_group.json @@ -0,0 +1,388 @@ +{ + "scheming_version": 1, + "group_type": "group", + "about": "Organizations: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (2.0.0) with ISO-19115 (INSPIRE) mandatory elements.", + "about_url": "https://github.com/mjanez/ckanext-schemingdcat", + "required_language": "es", + "form_languages": ["es", "en"], + "fields": [ + { + "field_name": "display_name", + "label": { + "en": "Display name", + "de": "Nombre para mostrar" + }, + "preset": "hidden_field", + "output_validators": "schemingdcat_if_empty_same_as_title" + }, + { + "field_name": "title_translated", + "label": { + "en": "Name", + "es": "Nombre" + }, + "required": true, + "preset": "schemingdcat_fluent_title_translated", + "form_placeholder": { + "en": "My group", + "es": "Mi grupo" + }, + "form_languages": ["es", "en"], + "required_language": "es" + }, + { + "field_name": "identifier", + "label": { + "en": "Identifier of the group", + "es": "Identificador del grupo" + }, + "required": true, + "preset": "schemingdcat_identifier", + "form_placeholder": { + "en": "e.g. https://www.eionet.europa.eu/gemet/en/concept/26773 or 26773 or my-group-name", + "es": "ej. https://www.eionet.europa.eu/gemet/en/concept/26773 o 26773 o mi-nombre-de-grupo" + }, + "help_text": { + "en": "e.g. Unique identifier code of the collection in a thesaurus or controlled vocabulary, e.g. (5033: GEMET - marine environment)", + "es": "Identificador único de la colección en un tesauro o vocabulario controlado, por ejemplo: (5033: GEMET - marine environment)" + }, + "help_allow_html": "True" + }, + { + "field_name": "name", + "label": "URL", + "validators": "not_empty unicode_safe name_validator group_name_validator name_identifier_validator", + "form_snippet": "slug.html", + "display_snippet": "link.html", + "form_placeholder": "my-group" + }, + { + "field_name": "description_translated", + "label": { + "en": "Abstract", + "es": "Resumen" + }, + "preset": "schemingdcat_fluent_notes_translated", + "form_placeholder": { + "en": "e.g. Some useful description about the organization.", + "es": "ej. Una descripción útil sobre la organización." + }, + "form_languages": ["es", "en"], + "required_language": "es" + }, + { + "field_name": "image_url", + "label": { + "en": "Image URL", + "es": "URL de la imagen" + }, + "display_snippet": "link.html", + "preset": "resource_url_upload", + "form_placeholder": "http://example.com/my-image.jpg" + }, + { + "field_name": "theme_es", + "label": { + "en": "Themes (NTI-RISP)", + "es": "Temáticas (NTI-RISP)" + }, + "preset": "multiple_choice_icon", + "display_property": "dcat:theme", + "select_size": 10, + "help_text": { + "en": "(Annex IV Themes NTI-RISP)", + "es": "(Temáticas Anexo IV NTI-RISP)" + }, + "help_allow_html": "True", + "sorted_choices": "True", + "choices": [ + { + "value": "http://datos.gob.es/kos/sector-publico/sector/ciencia-tecnologia", + "notation": "ciencia-tecnologia", + "label": { + "en": "Science and technology", + "es": "Ciencia y tecnolog\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Innovaci\u00F3n, Investigaci\u00F3n, I/u002BD/u002BI, Telecomunicaciones, Inernet y Sociedad de la Informaci\u00F3n." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/TECH" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/comercio", + "notation": "comercio", + "label": { + "en": "Commerce", + "es": "Comercio" + }, + "description": { + "en": "", + "es": "Incluye: Consumo." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/cultura-ocio", + "notation": "cultura-ocio", + "label": { + "en": "Culture and leisure", + "es": "Cultura y ocio" + }, + "description": { + "en": "", + "es": "Incluye: Tiempo libre." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/EDUC" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/demografia", + "notation": "demografia", + "label": { + "en": "Demography", + "es": "Demograf\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Inmigraci\u00F3n y Emigraci\u00F3n, Familia, Mujeres, Infancia, Mayores, Padr\u00F3n." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/SOCI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/deporte", + "notation": "deporte", + "label": { + "en": "Sport", + "es": "Deporte" + }, + "description": { + "en": "", + "es": "Incluye: Instalaciones deportivas, Federaciones, Competiciones." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/EDUC" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/economia", + "notation": "economia", + "label": { + "en": "Economy", + "es": "Econom\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Deuda, Moneda y Banca y finanzas." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/educacion", + "notation": "educacion", + "label": { + "en": "Education", + "es": "Educaci\u00F3n" + }, + "description": { + "en": "", + "es": "Incluye: Formaci\u00F3n." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/EDUC" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/empleo", + "notation": "empleo", + "label": { + "en": "Employment", + "es": "Empleo" + }, + "description": { + "en": "", + "es": "Incluye: Trabajo, Mercado laboral." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/energia", + "notation": "energia", + "label": { + "en": "Energy", + "es": "Energ\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Fuentes renovables." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ENER" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/hacienda", + "notation": "hacienda", + "label": { + "en": "Treasury", + "es": "Hacienda" + }, + "description": { + "en": "", + "es": "Incluye: Impuestos." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/GOVE" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/industria", + "notation": "industria", + "label": { + "en": "Industry", + "es": "Industria" + }, + "description": { + "en": "", + "es": "Incluye: Miner\u00EDa." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/legislacion-justicia", + "notation": "legislacion-justicia", + "label": { + "en": "Legislation and justice", + "es": "Legislaci\u00F3n y justicia" + }, + "description": { + "en": "", + "es": "Incluye: Registros." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/JUST" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/medio-ambiente", + "notation": "medio-ambiente", + "label": { + "en": "Environment", + "es": "Medio ambiente" + }, + "description": { + "en": "", + "es": "Incluye: Meteorolog\u00EDa, Geograf\u00EDa, Conservaci\u00F3n fauna y flora." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ENVI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/medio-rural-pesca", + "notation": "medio-rural-pesca", + "label": { + "en": "Rural environment", + "es": "Medio Rural" + }, + "description": { + "en": "", + "es": "Incluye: Agricultura, Ganader\u00EDa, Pesca y Silvicultura." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/AGRI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/salud", + "notation": "salud", + "label": { + "en": "Healthcare", + "es": "Salud" + }, + "description": { + "en": "", + "es": "Incluye: Sanidad." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/HEAL" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/sector-publico", + "notation": "sector-publico", + "label": { + "en": "Public sector", + "es": "Sector p\u00FAblico" + }, + "description": { + "en": "", + "es": "Incluye: Presupuestos, Organigrama institucional, Legislaci\u00F3n interna, Funci\u00F3n p\u00FAblica." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/GOVE" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/seguridad", + "notation": "seguridad", + "label": { + "en": "Security", + "es": "Seguridad" + }, + "description": { + "en": "", + "es": "Incluye: Protecci\u00F3n civil, Defensa." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/JUST" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/sociedad-bienestar", + "notation": "sociedad-bienestar", + "label": { + "en": "Society and welfare", + "es": "Sociedad y bienestar" + }, + "description": { + "en": "", + "es": "Incluye: Participaci\u00F3n ciudadana, Marginaci\u00F3n, Envejecimiento Activo, Autonom\u00EDa personal y Dependencia, Invalidez, Jubilaci\u00F3n, Seguros y Pensiones, Prestaciones y Subvenciones." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/SOCI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/transporte", + "notation": "transporte", + "label": { + "en": "Transport", + "es": "Transporte" + }, + "description": { + "en": "", + "es": "Incluye: Comunicaciones y Tr/u00E1fico." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/TRAN" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/turismo", + "notation": "turismo", + "label": { + "en": "Tourism", + "es": "Turismo" + }, + "description": { + "en": "", + "es": "Incluye: Alojamientos, Hosteler\u00EDa, Gastronom\u00EDa." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/urbanismo-infraestructuras", + "notation": "urbanismo-infraestructuras", + "label": { + "en": "Town planning and infrastructures", + "es": "Urbanismo e infraestructuras" + }, + "description": { + "en": "", + "es": "Incluye: Saneamiento p\u00FAblico, Construcci\u00F3n (infraestructuras, equipamientos p\u00FAblicos)." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/REGI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/vivienda", + "notation": "vivienda", + "label": { + "en": "Housing", + "es": "Vivienda" + }, + "description": { + "en": "", + "es": "Incluye: Mercado inmobiliario, Construcci\u00F3n (viviendas)." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/REGI" + } + ] + } + ] +} \ No newline at end of file diff --git a/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_org.json b/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_org.json new file mode 100644 index 0000000..f531d94 --- /dev/null +++ b/ckanext/schemingdcat/schemas/geodcat_ap/es_geodcat_ap_org.json @@ -0,0 +1,495 @@ +{ + "scheming_version": 2, + "organization_type": "organization", + "about": "Organizations: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (2.0.0) with ISO-19115 (INSPIRE) mandatory elements.", + "about_url": "https://github.com/mjanez/ckanext-schemingdcat", + "required_language": "es", + "form_languages": ["es", "en"], + "fields": [ + { + "field_name": "display_name", + "label": { + "en": "Display name", + "de": "Nombre para mostrar" + }, + "preset": "hidden_field", + "output_validators": "schemingdcat_if_empty_same_as_title" + }, + { + "field_name": "title_translated", + "label": { + "en": "Name", + "es": "Nombre" + }, + "required": true, + "preset": "schemingdcat_fluent_title_translated", + "form_placeholder": { + "en": "My organization", + "es": "Mi organización" + }, + "form_languages": ["es", "en"], + "required_language": "es" + }, + { + "field_name": "identifier", + "label": { + "en": "Identifier of the publisher", + "es": "Identificador del publicador" + }, + "required": true, + "preset": "schemingdcat_identifier", + "form_placeholder": { + "en": "e.g. http://datos.gob.es/recurso/sector-publico/org/Organismo/E05065601 or E05065601 or my-organization-name", + "es": "ej. http://datos.gob.es/recurso/sector-publico/org/Organismo/E05065601 o E05068001 o mi-nombre-de-organizacion" + }, + "help_text": { + "en": "e.g. Unique identifier of the organisation, for example DIR3 code for Spain (datos.gob.es).", + "es": "ej. Identificador único de la organización, por ejemplo el código DIR3 para España (datos.gob.es)." + }, + "help_allow_html": "True" + }, + { + "field_name": "name", + "label": "URL", + "validators": "not_empty unicode_safe name_validator group_name_validator name_identifier_validator", + "form_snippet": "slug.html", + "display_snippet": "link.html", + "form_placeholder": "my-organization" + }, + { + "field_name": "description_translated", + "label": { + "en": "Abstract", + "es": "Resumen" + }, + "preset": "schemingdcat_fluent_notes_translated", + "form_placeholder": { + "en": "e.g. Some useful description about the organization.", + "es": "ej. Una descripción útil sobre la organización." + }, + "form_languages": ["es", "en"], + "required_language": "es" + }, + { + "field_name": "image_url", + "label": { + "en": "Image URL", + "es": "URL de la imagen" + }, + "display_snippet": "link.html", + "preset": "resource_url_upload", + "form_placeholder": "http://example.com/my-image.jpg" + }, + { + "field_name": "publisher_email", + "label": { + "en": "Email of the publisher", + "es": "Email del publicador" + }, + "display_snippet": "email.html", + "form_placeholder": "joseblanco@example.com" + }, + { + "field_name": "publisher_url", + "label": { + "en": "Website of the publisher", + "es": "Web del publicador" + }, + "display_snippet": "link.html", + "form_placeholder": "e.g. http://www.example.org.com/" + }, + { + "field_name": "publisher_type", + "label": { + "en": "Type of the publisher", + "es": "Tipo de publicador" + }, + "preset": "select", + "display_property": "dct:type", + "display_snippet": "schemingdcat/display_snippets/link_schema.html", + "choices": [ + { + "label": { + "en": "National authority", + "es": "Autoridad nacional" + }, + "value": "http://purl.org/adms/publishertype/NationalAuthority" + }, + { + "label": { + "en": "Regional authority", + "es": "Autoridad regional" + }, + "value": "http://purl.org/adms/publishertype/RegionalAuthority" + }, + { + "label": { + "en": "Supranational authority", + "es": "Autoridad supranacional" + }, + "value": "http://purl.org/adms/publishertype/SupraNationalAuthority" + }, + { + "label": { + "en": "Local authority", + "es": "Autoridad local" + }, + "value": "http://purl.org/adms/publishertype/LocalAuthority" + }, + { + "label": { + "en": "Academia-Scientific organisation", + "es": "Organización académica-científica" + }, + "value": "http://purl.org/adms/publishertype/Academia-ScientificOrganisation" + }, + { + "label": { + "en": "Non profit organisation", + "es": "Organización sin animo de lucro" + }, + "value": "http://purl.org/adms/publishertype/NonProfitOrganisation" + }, + { + "label": { + "en": "Company", + "es": "Empresa" + }, + "value": "http://purl.org/adms/publishertype/Company" + }, + { + "label": { + "en": "Industry consortium", + "es": "Consorcio industrial" + }, + "value": "http://purl.org/adms/publishertype/IndustryConsortium" + }, + { + "label": { + "en": "Non Governmental Organisation", + "es": "Organización no gubernamental (ONG)" + }, + "value": "http://purl.org/adms/publishertype/NonGovernmentalOrganisation" + }, + { + "label": { + "en": "Private individual(s)", + "es": "Individuo(s) privado(s)" + }, + "value": "http://purl.org/adms/publishertype/PrivateIndividual(s)" + }, + { + "label": { + "en": "Standardisation body", + "es": "Organismo de normalización" + }, + "value": "http://purl.org/adms/publishertype/StandardisationBody" + } + ] + }, + { + "field_name": "theme_es", + "label": { + "en": "Themes (NTI-RISP)", + "es": "Temáticas (NTI-RISP)" + }, + "preset": "multiple_choice_icon", + "display_property": "dcat:theme", + "select_size": 10, + "help_text": { + "en": "(Annex IV Themes NTI-RISP)", + "es": "(Temáticas Anexo IV NTI-RISP)" + }, + "help_allow_html": "True", + "sorted_choices": "True", + "choices": [ + { + "value": "http://datos.gob.es/kos/sector-publico/sector/ciencia-tecnologia", + "notation": "ciencia-tecnologia", + "label": { + "en": "Science and technology", + "es": "Ciencia y tecnolog\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Innovaci\u00F3n, Investigaci\u00F3n, I/u002BD/u002BI, Telecomunicaciones, Inernet y Sociedad de la Informaci\u00F3n." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/TECH" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/comercio", + "notation": "comercio", + "label": { + "en": "Commerce", + "es": "Comercio" + }, + "description": { + "en": "", + "es": "Incluye: Consumo." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/cultura-ocio", + "notation": "cultura-ocio", + "label": { + "en": "Culture and leisure", + "es": "Cultura y ocio" + }, + "description": { + "en": "", + "es": "Incluye: Tiempo libre." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/EDUC" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/demografia", + "notation": "demografia", + "label": { + "en": "Demography", + "es": "Demograf\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Inmigraci\u00F3n y Emigraci\u00F3n, Familia, Mujeres, Infancia, Mayores, Padr\u00F3n." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/SOCI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/deporte", + "notation": "deporte", + "label": { + "en": "Sport", + "es": "Deporte" + }, + "description": { + "en": "", + "es": "Incluye: Instalaciones deportivas, Federaciones, Competiciones." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/EDUC" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/economia", + "notation": "economia", + "label": { + "en": "Economy", + "es": "Econom\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Deuda, Moneda y Banca y finanzas." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/educacion", + "notation": "educacion", + "label": { + "en": "Education", + "es": "Educaci\u00F3n" + }, + "description": { + "en": "", + "es": "Incluye: Formaci\u00F3n." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/EDUC" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/empleo", + "notation": "empleo", + "label": { + "en": "Employment", + "es": "Empleo" + }, + "description": { + "en": "", + "es": "Incluye: Trabajo, Mercado laboral." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/energia", + "notation": "energia", + "label": { + "en": "Energy", + "es": "Energ\u00EDa" + }, + "description": { + "en": "", + "es": "Incluye: Fuentes renovables." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ENER" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/hacienda", + "notation": "hacienda", + "label": { + "en": "Treasury", + "es": "Hacienda" + }, + "description": { + "en": "", + "es": "Incluye: Impuestos." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/GOVE" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/industria", + "notation": "industria", + "label": { + "en": "Industry", + "es": "Industria" + }, + "description": { + "en": "", + "es": "Incluye: Miner\u00EDa." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/legislacion-justicia", + "notation": "legislacion-justicia", + "label": { + "en": "Legislation and justice", + "es": "Legislaci\u00F3n y justicia" + }, + "description": { + "en": "", + "es": "Incluye: Registros." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/JUST" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/medio-ambiente", + "notation": "medio-ambiente", + "label": { + "en": "Environment", + "es": "Medio ambiente" + }, + "description": { + "en": "", + "es": "Incluye: Meteorolog\u00EDa, Geograf\u00EDa, Conservaci\u00F3n fauna y flora." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ENVI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/medio-rural-pesca", + "notation": "medio-rural-pesca", + "label": { + "en": "Rural environment", + "es": "Medio Rural" + }, + "description": { + "en": "", + "es": "Incluye: Agricultura, Ganader\u00EDa, Pesca y Silvicultura." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/AGRI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/salud", + "notation": "salud", + "label": { + "en": "Healthcare", + "es": "Salud" + }, + "description": { + "en": "", + "es": "Incluye: Sanidad." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/HEAL" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/sector-publico", + "notation": "sector-publico", + "label": { + "en": "Public sector", + "es": "Sector p\u00FAblico" + }, + "description": { + "en": "", + "es": "Incluye: Presupuestos, Organigrama institucional, Legislaci\u00F3n interna, Funci\u00F3n p\u00FAblica." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/GOVE" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/seguridad", + "notation": "seguridad", + "label": { + "en": "Security", + "es": "Seguridad" + }, + "description": { + "en": "", + "es": "Incluye: Protecci\u00F3n civil, Defensa." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/JUST" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/sociedad-bienestar", + "notation": "sociedad-bienestar", + "label": { + "en": "Society and welfare", + "es": "Sociedad y bienestar" + }, + "description": { + "en": "", + "es": "Incluye: Participaci\u00F3n ciudadana, Marginaci\u00F3n, Envejecimiento Activo, Autonom\u00EDa personal y Dependencia, Invalidez, Jubilaci\u00F3n, Seguros y Pensiones, Prestaciones y Subvenciones." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/SOCI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/transporte", + "notation": "transporte", + "label": { + "en": "Transport", + "es": "Transporte" + }, + "description": { + "en": "", + "es": "Incluye: Comunicaciones y Tr/u00E1fico." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/TRAN" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/turismo", + "notation": "turismo", + "label": { + "en": "Tourism", + "es": "Turismo" + }, + "description": { + "en": "", + "es": "Incluye: Alojamientos, Hosteler\u00EDa, Gastronom\u00EDa." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/ECON" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/urbanismo-infraestructuras", + "notation": "urbanismo-infraestructuras", + "label": { + "en": "Town planning and infrastructures", + "es": "Urbanismo e infraestructuras" + }, + "description": { + "en": "", + "es": "Incluye: Saneamiento p\u00FAblico, Construcci\u00F3n (infraestructuras, equipamientos p\u00FAblicos)." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/REGI" + }, + { + "value": "http://datos.gob.es/kos/sector-publico/sector/vivienda", + "notation": "vivienda", + "label": { + "en": "Housing", + "es": "Vivienda" + }, + "description": { + "en": "", + "es": "Incluye: Mercado inmobiliario, Construcci\u00F3n (viviendas)." + }, + "dcat_ap": "http://publications.europa.eu/resource/authority/data-theme/REGI" + } + ] + } + ] + } \ No newline at end of file diff --git a/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml b/ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_full.yaml similarity index 80% rename from ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml rename to ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_full.yaml index dac3c90..e09c42d 100644 --- a/ckanext/schemingdcat/schemas/geodcatap/geodcatap_dataset.yaml +++ b/ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_full.yaml @@ -1,14 +1,16 @@ scheming_version: 2 dataset_type: dataset -about: "Datasets/Distributions: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (2.0.0) with ISO-19115 (INSPIRE) mandatory elements. European context (EU27)" +about: "Datasets/Distributions: Adaptation for CKAN of the GeoDCAT-AP metadata schema extended (3.0.0) with ISO-19115 (INSPIRE) mandatory elements. European context (EU27)" about_url: https://github.com/mjanez/ckanext-schemingdcat -form_languages: ["en", "en"] +form_languages: ["en", "es"] required_language: "en" -schema_version: 2.1 -schema_date: 2024-05-01 -schema_name: geodcatap +schema_version: 3.0 +schema_date: 2024-08-01 +schema_name: es_geodcat_ap_full schema_title: GeoDCAT-AP schema_description: Geospatial extension for the DCAT application profile for data portals in Europe (GeoDCAT-AP) +schema_profile_version: 3.0.0 +schema_profile_url: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0 schema_form_groups: # Basic Info parties form_page (#1) - form_group_id: title @@ -56,18 +58,18 @@ schema_form_groups: label: en: Author information es: Información del autor - fa_icon: fa-pencil-square-o + fa_icon: fa-pencil-square # Quality form_page (#3) - form_group_id: standards label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square - form_group_id: temporal_info label: en: Timing es: Información temporal - fa_icon: fa-clock-o + fa_icon: fa-clock - form_group_id: lineage label: en: Provenance information @@ -120,12 +122,21 @@ schema_form_groups: label: en: Resource locator es: Localizador del recurso - fa_icon: fa-link + - form_group_id: resource_access_service + label: + en: Data Service of the resource + es: Servicio de datos del recurso + fa_icon: fa-asterisk + - form_group_id: resource_distribution + label: + en: Information on resource distribution + es: Información de la distribución del recurso + fa_icon: fa-list-ul - form_group_id: resource_type label: en: Resource type information es: Información del tipo de recurso - fa_icon: fa-file-code-o + fa_icon: fa-file-code - form_group_id: resource_license_info label: en: License and restrictions @@ -140,7 +151,127 @@ schema_form_groups: label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square + - form_group_id: resource_relations + label: + en: Related resources + es: Recursos relacionados + fa_icon: fa-code-fork +schema_form_tabs: + # Dataset tabs + - form_tab: basic_tab + tab_type: dataset_fields + label: + en: Identification + es: Identificación + form_group_id: + - title + - general_info + - identification + - notes + - form_tab: vocabs_tab + tab_type: dataset_fields + label: + en: Vocabs + es: Vocabularios + form_group_id: + - vocabs + - form_tab: contact_tab + tab_type: dataset_fields + label: + en: Contact point + es: Punto de contacto + form_group_id: + - contact + - form_tab: publisher_tab + tab_type: dataset_fields + label: + en: Publisher + es: Publicador + form_group_id: + - publisher + - form_tab: responsible_parties_tab + tab_type: dataset_fields + label: + en: Responsible parties + es: Responsables + form_group_id: + - maintainer + - author + - form_tab: quality_tab + tab_type: dataset_fields + label: + en: Quality + es: Calidad + form_group_id: + - standards + - temporal_info + - form_tab: lineage_tab + tab_type: dataset_fields + label: + en: Lineage + es: Linaje + form_group_id: + - lineage + - purpose + - form_tab: spatial_tab + tab_type: dataset_fields + label: + en: Spatial + es: Espacial + form_group_id: + - spatial_info + - inspire + - form_tab: license_tab + tab_type: dataset_fields + label: + en: License + es: Licencia + form_group_id: + - license_info + - version_notes + # Distribution tabs + - form_tab: resource_basic_tab + tab_type: resource_fields + label: + en: Identification + es: Identificación + form_group_id: + - resource_title + - resource_url + - resource_notes + - resource_identification + - form_tab: resource_distribution + tab_type: resource_fields + label: + en: Distribution + es: Distribución + form_group_id: + - resource_distribution + - resource_type + - resource_access_service + - form_tab: resource_lineage_tab + tab_type: resource_fields + label: + en: Lineage + es: Linaje + form_group_id: + - resource_lineage + - resource_relations + - form_tab: resource_quality_tab + tab_type: resource_fields + label: + en: Quality + es: Calidad + form_group_id: + - resource_standards + - form_tab: resource_license_tab + tab_type: resource_fields + label: + en: License + es: Licencia + form_group_id: + - resource_license_info ### Codes in Schema # (M): Mandatory @@ -151,17 +282,8 @@ schema_form_groups: #--Dataset (dcat:Dataset) fields--# dataset_fields: -#--Basic info--# -- start_form_page: - title: - en: Basic Info - es: Identificación - description: - en: Basic metadata identification and reference information. - es: Información básica de identificación y referencia de los metadatos. - # Dataset title translated (M) - field_name: title_translated +- field_name: title_translated label: en: Dataset title es: Título del conjunto de datos @@ -273,9 +395,8 @@ dataset_fields: label: en: Resource type es: Tipo de recurso - preset: select + preset: select_not_empty form_include_blank_choice: False - validators: not_empty scheming_required required: True display_property: dct:type display_snippet: schemingdcat/display_snippets/link_schema.html @@ -513,11 +634,10 @@ dataset_fields: label: en: Metadata language es: Idioma de los metadatos - preset: select + preset: select_not_empty display_property: dct:language display_snippet: schemingdcat/display_snippets/link_schema.html form_include_blank_choice: False - validators: not_empty scheming_required required: True sorted_choices: True choices: @@ -637,10 +757,6 @@ dataset_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano @@ -698,11 +814,10 @@ dataset_fields: label: en: ISO 19115 topic category es: Categoría temática ISO 19115 - preset: select + preset: select_not_empty display_property: dcat:keyword display_snippet: schemingdcat/display_snippets/link_schema.html form_include_blank_choice: False - validators: not_empty scheming_required required: True sorted_choices: True choices: @@ -744,7 +859,6 @@ dataset_fields: value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/transportation - label: utilitiesCommunication value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/utilitiesCommunication - help_text: en: 'e.g. Labels from Metadata code list register (INSPIRE)' es: 'ej: Etiquetas del Registro de listas controladas de metadatos (INSPIRE)' @@ -782,12 +896,16 @@ dataset_fields: es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' form_group_id: vocabs -# TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py # Metadata point of contact URI (M) - field_name: contact_uri label: en: URI of the Metadata contact point es: URI del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields display_snippet: schemingdcat/display_snippets/link_name.html form_placeholder: http://orgs.vocab.org/some-org form_group_id: contact @@ -797,6 +915,11 @@ dataset_fields: label: en: Metadata contact point name es: Nombre del punto de contacto de los metadatos + dependent_fields: + field_name: contact + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields display_property: dcat:contactPoint form_placeholder: José Blanco form_group_id: contact @@ -806,7 +929,11 @@ dataset_fields: label: en: Metadata contact point email es: Email del punto de contacto de los Metadatos - validators: not_empty scheming_required schemingdcat_valid_email + dependent_fields: + field_name: contact + subfields: + - field_name: email + validators: not_empty scheming_required schemingdcat_valid_email schemingdcat_fill_dependent_fields required: True display_property: vcard:hasEmail display_snippet: email.html @@ -818,27 +945,145 @@ dataset_fields: label: en: Website of the Metadata contact point es: Web del punto de contacto de los metadatos - preset: valid_url + dependent_fields: + field_name: contact + subfields: + - field_name: url + preset: valid_url_dependent_fields display_property: vcard:hasURL form_placeholder: http://www.example.com form_group_id: contact -#--Responsible party--# -- start_form_page: - title: - en: Responsible party - es: Responsable - description: - en: Organization(s) responsible for the creation, management, maintenance and distribution of datasets. - es: Organización(es) responsable(s) de la creación, gestión, mantenimiento y distribución de los conjuntos de datos. - -# Publisher name (M) - field_name: publisher_name +# GeoDCAT-AP: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact +- field_name: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + display_property: dcat:hadRole + dependent_fields: + field_name: contact + subfields: + - field_name: role + preset: select_dependent_fields + display_snippet: schemingdcat/display_snippets/link_schema.html + choices: + - label: + en: Resource Provider + es: Proveedor de recursos + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/resourceProvider + geodcatap: geodcatap:resourceProvider + - label: + en: Custodian + es: Custodio + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/custodian + geodcatap: geodcatap:custodian + - label: + en: Owner + es: Propietario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/owner + geodcatap: dct:rightsHolder + - label: + en: User + es: Usuario + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/user + geodcatap: geodcatap:user + - label: + en: Distributor + es: Distribuidor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/distributor + geodcatap: geodcatap:distributor + - label: + en: Originator + es: Originador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/originator + geodcatap: geodcatap:originator + - label: + en: Point of Contact + es: Punto de contacto + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/pointOfContact + geodcatap: dcat:contactPoint + - label: + en: Principal Investigator + es: Investigador principal + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/principalInvestigator + geodcatap: geodcatap:principalInvestigator + - label: + en: Processor + es: Procesador + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/processor + geodcatap: geodcatap:processor + - label: + en: Publisher + es: Editor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/publisher + geodcatap: dct:publisher + - label: + en: Author + es: Autor + value: http://inspire.ec.europa.eu/metadata-codelist/ResponsiblePartyRole/author + geodcatap: dct:creator + form_group_id: contact + + +# TO MIGRATE: contact dict. Filling with contact_* values +- field_name: contact + label: + en: Contact points + es: Puntos de contacto + repeating_label: + en: Contact point + es: Punto de contacto + form_snippet: null + display_snippet: null + repeating_subfields: + - field_name: uri + legacy: contact_uri + label: + en: URI of the Metadata contact point + es: URI del punto de contacto de los metadatos + + - field_name: name + legacy: contact_name + label: + en: Metadata contact point name + es: Nombre del punto de contacto de los metadatos + + - field_name: email + legacy: contact_email + label: + en: Metadata contact point email + es: Email del punto de contacto de los Metadatos + + - field_name: url + legacy: contact_url + label: + en: Website of the Metadata contact point + es: Web del punto de contacto de los metadatos + + - field_name: role + legacy: contact_role + label: + en: Metadata contact point role + es: Rol del punto de contacto de los metadatos + + help_text: + en: 'Contact information for enquiries about the dataset.' + es: 'Información de contacto para consultas sobre el conjunto de datos.' + form_group_id: contact + + +# GeoDCAT-AP: https://semiceu.github.io/GeoDCAT-AP/releases/3.0.0#responsible-party-and-metadata-point-of-contact---dataset-responsible-party-and-metadata-point-of-contact +- field_name: publisher_name label: en: Name of the publisher es: Nombre del publicador display_property: foaf:name form_placeholder: José Blanco + dependent_fields: + field_name: publisher + subfields: + - field_name: name + validators: schemingdcat_fill_dependent_fields help_text: en: "A party that makes a dataset available to others." es: "Persona u organización que pone a disposición de otros el conjunto de datos." @@ -849,6 +1094,11 @@ dataset_fields: label: en: Identifier of the publisher es: Identificador del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: identifier + validators: schemingdcat_fill_dependent_fields display_property: dct:identifier form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 help_text: @@ -862,6 +1112,11 @@ dataset_fields: label: en: URI of the publisher es: URI del publicador + dependent_fields: + field_name: publisher + subfields: + - field_name: uri + validators: schemingdcat_fill_dependent_fields display_snippet: schemingdcat/display_snippets/link_name.html form_snippet: schemingdcat/form_snippets/publisher_uri.html form_placeholder: http://orgs.vocab.org/some-org @@ -875,7 +1130,11 @@ dataset_fields: label: en: Email of the publisher es: Email del publicador - preset: schemingdcat_valid_email + dependent_fields: + field_name: publisher + subfields: + - field_name: email + preset: schemingdcat_valid_email_dependent_fields display_property: foaf:mbox form_placeholder: joseblanco@example.com form_group_id: publisher @@ -887,7 +1146,11 @@ dataset_fields: es: Web del publicador display_property: foaf:homepage form_placeholder: http://www.example.com - preset: valid_url + dependent_fields: + field_name: publisher + subfields: + - field_name: url + preset: valid_url_dependent_fields help_text: en: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL @@ -898,7 +1161,11 @@ dataset_fields: label: en: Type of the publisher es: Tipo de publicador - preset: select + dependent_fields: + field_name: publisher + subfields: + - field_name: type + preset: select_dependent_fields display_property: dct:type display_snippet: schemingdcat/display_snippets/link_schema.html choices: @@ -948,6 +1215,56 @@ dataset_fields: value: http://purl.org/adms/publishertype/StandardisationBody form_group_id: publisher +# TO MIGRATE: Publisher dict. Filling with publisher_* values +- field_name: publisher + label: + en: Publisher + es: Publicador + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: publisher_uri + label: + en: URI of the publisher + es: URI del publicador + + - field_name: name + legacy: publisher_name + label: + en: URI + es: URI + + - field_name: email + legacy: publisher_email + label: + en: Email of the publisher + es: Email del publicador + + - field_name: identifier + legacy: publisher_identifier + label: + en: Identifier of the publisher + es: Identificador del publicador + + - field_name: url + legacy: publisher_url + label: + en: Website of the publisher + es: Web del publicador + + - field_name: type + legacy: publisher_type + label: + en: Type of the publisher + es: Tipo de publicador + + help_text: + en: 'Entity responsible for making the dataset available.' + es: 'Entidad responsable de la puesta a disposición del conjunto de datos.' + form_group_id: publisher + # Maintainer name (O) - field_name: maintainer label: @@ -960,6 +1277,15 @@ dataset_fields: es: "Persona u organización responsable de mantener o actualizar un conjunto de datos." form_group_id: maintainer +# Maintainer name (O). Fallback, CKAN using maintainer in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: maintainer_name + label: + en: Name of the dataset maintainer + es: Nombre del mantenedor + validators: if_empty_same_as(maintainer) unicode_safe + preset: hide_fallback + form_group_id: maintainer + # Maintainer Identifier (O) - field_name: maintainer_uri label: @@ -1008,6 +1334,15 @@ dataset_fields: es: "Persona u organización creadora o productora de un conjunto de datos" form_group_id: author +# Author name (O). Fallback, CKAN using author in basic package schema: https://github.com/ckan/ckan/blob/f2d47c8f87bc5f224ebff93b23d0f6fda8fb81b4/ckan/model/package.py#L36-L57 +- field_name: author_name + label: + en: Name of the dataset author + es: Nombre del mantenedor + validators: if_empty_same_as(author) unicode_safe + preset: hide_fallback + form_group_id: author + # Author Identifier (O) - field_name: author_uri label: @@ -1044,17 +1379,8 @@ dataset_fields: es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL form_group_id: author -#--Quality--# -- start_form_page: - title: - en: Quality - es: Calidad - description: - en: Data quality information. - es: Información sobre calidad de los datos. - # Other identifier (O)) - field_name: alternate_identifier +- field_name: alternate_identifier label: en: Other identifier es: Identificador alternativo @@ -1101,19 +1427,36 @@ dataset_fields: required: False display_property: dct:conformsTo preset: multiple_metadata_profiles - form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/2.0.0' + form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/3.0.0' help_text: en: 'URI(s) of the Metadata profile used' es: 'URI(s) del perfil de Metadatos utilizado' form_group_id: standards +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: standards + # Temporal start (O) - field_name: temporal_start label: en: Temporal extent (Start) es: Cobertura temporal (Inicio) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: start display_property: dct:temporal - preset: date + preset: date_dependent_fields form_group_id: temporal_info # Temporal end (O) @@ -1121,8 +1464,38 @@ dataset_fields: label: en: Temporal extent (End) es: Cobertura temporal (Fin) + dependent_fields: + field_name: temporal_coverage + subfields: + - field_name: end display_property: dct:temporal - preset: date + preset: date_dependent_fields + form_group_id: temporal_info + +# TO MIGRATE: Temporal coverage dict. Filling with temporal_* values +- field_name: temporal_coverage + label: + en: Temporal coverage + es: Cobertura temporal + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: start + legacy: temporal_start + label: + en: Temporal extent (Start) + es: Cobertura temporal (Inicio) + + - field_name: end + legacy: temporal_end + label: + en: Temporal extent (End) + es: Cobertura temporal (Fin) + + help_text: + en: The temporal period or periods the dataset covers. + es: Periodo o periodos temporales que abarca el conjunto de datos. form_group_id: temporal_info # Update frequency (O) @@ -1304,6 +1677,19 @@ dataset_fields: es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' form_group_id: lineage +# Related resources (O) +- field_name: is_referenced_by + label: + en: Is referenced by + es: Es referenciado por + preset: multiple_text_links + display_property: dct:isReferencedBy + form_placeholder: 'http://example.org/catalog/dataset/ejemplo' + help_text: + en: 'A related resource, such as a publication, that references, cites, or otherwise points to the dataset.' + es: 'Un recurso relacionado, como una publicación, que referencia, cita o de otro modo apunta al conjunto de datos.' + form_group_id: lineage + # Purpose (O) - field_name: purpose label: @@ -1331,20 +1717,19 @@ dataset_fields: form_group_id: standards ##TODO: temporal_resolution -## ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i - - -#--Spatial--# -- start_form_page: - title: - en: Spatial info - es: Espacial - description: - en: Spatial capabilities information. - es: Información sobre las capacidades espaciales. +## Add codelist or validator to check ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i +- field_name: temporal_resolution + label: + en: Temporal resolution + es: Resolución Temporal + help_text: + en: 'Minimum time period resolvable in the dataset,[ISO 8601].' + es: 'Período de tiempo mínimo resoluble en el conjunto de datos, ISO 8601., [ISO 8601].' + help_allow_html: True + form_group_id: standards # INSPIRE Themes (M) - field_name: theme +- field_name: theme label: en: INSPIRE Themes es: Temas INSPIRE @@ -1517,8 +1902,8 @@ dataset_fields: display_snippet: schemingdcat/display_snippets/link_epsg.html form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 help_text: - en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' - es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' help_allow_html: True form_group_id: inspire @@ -1527,7 +1912,13 @@ dataset_fields: label: en: Bounding Box es: Extensión espacial - preset: spatial + preset: spatial_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: bbox + - field_name: geom + - field_name: centroid form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' help_text: en: 'If a Geographic identifier is selected and this element is empty, it will be filled in automatically.Draw BBox and copy GEOJSON with "coordinates" value.. e.g. {"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}
Only "geometry" dict with "type" and "coordinates" elements. More information at GeoJSON bounding boxes.' @@ -1540,10 +1931,15 @@ dataset_fields: label: en: Geographic identifier es: Identificador geográfico - preset: select_spatial_icon + preset: select_spatial_icon_dependent_fields + dependent_fields: + field_name: spatial_coverage + subfields: + - field_name: uri + - field_name: text display_property: dcat:theme select_size: 10 - sorted_choices: True + sorted_choices: False choices: - label: en: Spain @@ -1782,6 +2178,58 @@ dataset_fields: help_allow_html: True form_group_id: spatial_info +# TO MIGRATE: Geographic bounding box dict. Filling with spatial_* values +- field_name: spatial_coverage + label: + en: Spatial coverage + es: Cobertura espacial + form_snippet: null + display_snippet: null + repeating_once: true + repeating_subfields: + - field_name: uri + legacy: spatial_uri + label: + en: URI + es: URI + + - field_name: text + legacy: spatial_uri + label: + en: Label + es: Etiqueta + form_placeholder: 'España' + + - field_name: geom + legacy: spatial_geom + label: + en: Geometry + es: Geometría + form_placeholder: '{"type": "Polygon", "coordinates": [[[11.9936, 54.0486], [11.9936, 54.2466], [12.3045, 54.2466], [12.3045, 54.0486], [11.9936, 54.0486]]]}' + validators: schemingdcat_valid_json_object + + - field_name: bbox + legacy: spatial + label: + en: Bounding Box + es: Extensión espacial + form_placeholder: '{"type": "Polygon", "coordinates": [[[-18.27, 27.54], [4.44, 27.54], [4.44, 43.85], [-18.27, 43.85], [-18.27, 27.54]]]}' + validators: schemingdcat_valid_json_object + + - field_name: centroid + legacy: spatial_centroid + label: + en: Centroid + es: Centroide + form_placeholder: '{"type": "Point", "coordinates": [1.5, 1.5]}' + validators: schemingdcat_valid_json_object + + help_text: + en: 'A geographic region that is covered by the dataset.' + es: 'Región geográfica que abarca el conjunto de datos.' + form_group_id: spatial_info + + # Spatial representation type (O) - field_name: representation_type label: @@ -1834,17 +2282,8 @@ dataset_fields: es: Especifique la resolución espacial como distancia en metros form_group_id: inspire -#--License--# -- start_form_page: - title: - en: License info - es: Licencia - description: - en: Information on licenses and restrictions on use and access. - es: Información sobre licencias y restricciones de uso y acceso. - # License URI (M) - field_name: license_id +- field_name: license_id label: en: License es: Licencia @@ -1951,14 +2390,78 @@ resource_fields: # Access URL (M) - field_name: url + label: + en: URL + es: URL + preset: resource_url_upload + display_snippet: schemingdcat/display_snippets/link.html + form_group_id: resource_url + +# Access URL (M). Hide, falls back to the standard resource url field +- field_name: access_url label: en: Access URL es: URL de acceso - preset: resource_url_upload + validators: if_empty_same_as(url) unicode_safe + form_snippet: null display_property: dcat:accessURL display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that gives access to the dataset (defaults to the standard resource URL).' + es: 'URL que da acceso al conjunto de datos (por defecto es la URL de recursos estándar).' + form_group_id: resource_url + +# Access URL (M). Falls back to the standard resource url field +- field_name: download_url + label: + en: Download URL + es: URL de descarga + validators: if_empty_same_as(url) unicode_safe + display_property: dcat:downloadURL + display_snippet: schemingdcat/display_snippets/link.html + help_text: + en: 'URL that provides a direct link to a downloadable file (defaults to the standard resource URL).' + es: 'URL que proporciona un enlace directo a un archivo descargable (por defecto es la URL de recursos estándar).' form_group_id: resource_url +# Access services (O). Dictionariy. +- field_name: access_services + label: + en: Access services + es: Servicios de acceso + repeating_label: + en: Access service + es: Servicio de acceso + display_property: dcat:downloadURL + repeating_subfields: + - field_name: uri + label: + en: Access service URI + es: URI del servicio de acceso + display_snippet: schemingdcat/display_snippets/link_schema.html + - field_name: title + label: + en: Access service title + es: Título del servicio de acceso + - field_name: endpoint_description + label: + en: Endpoint description + es: Descripción del punto final + - field_name: endpoint_url + label: + en: Endpoint URL + es: URL del punto final + preset: multiple_text_links + - field_name: serves_dataset + label: + en: Serves dataset + es: Sirve los conjuntos de datos + preset: multiple_text_links + help_text: + en: 'A data service that gives access to the resource.' + es: 'Un servicio de datos que da acceso al recurso.' + form_group_id: resource_access_service + #FIX: Resource title (M) -- name_translated field dont work - field_name: name label: @@ -2000,6 +2503,30 @@ resource_fields: preset: date_modified form_group_id: resource_identification +# Resource character encoding (C) +- field_name: hash + label: + en: Hash + es: Hash + display_property: spdx:checksumValue + form_placeholder: 4304cf2e751e6053c90b1804c89c0ebb758f395a + help_text: + en: 'Checksum of the downloaded file.' + es: 'Suma de comprobación del fichero descargado.' + form_group_id: resource_identification + +# Resource character encoding (C) +- field_name: hash_algorithm + label: + en: Hash Algorithm + es: Algoritmo Hash + display_property: spdx:Checksum + form_placeholder: http://spdx.org/rdf/terms#checksumAlgorithm_sha1 + help_text: + en: 'Algorithm used to calculate to checksum.' + es: 'Algoritmo utilizado para calcular la suma de comprobación.' + form_group_id: resource_identification + # Resource status (O) - field_name: availability label: @@ -2043,7 +2570,7 @@ resource_fields: es: Formato preset: resource_format_autocomplete display_property: dct:format - form_group_id: resource_type + form_group_id: resource_distribution # Media type (O) - field_name: mimetype @@ -2057,7 +2584,33 @@ resource_fields: en: 'This property refers to the media type of the Distribution as defined in the official register of media types (IANA)' es: 'Esta propiedad se refiere al tipo de medio de la Distribución tal y como se define en el registro oficial de tipos de medios (IANA)' help_allow_html: True - form_group_id: resource_type + form_group_id: resource_distribution + +# Compress format (O) +- field_name: compress_format + label: + en: Compress format + es: Formato comprimido + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:compressFormat + form_placeholder: http://www.iana.org/assignments/media-types/application/gzip + help_text: + en: 'The format of the file in which the data is contained in a compressed form.' + es: 'Formato del archivo en el que los datos están contenidos de forma comprimida.' + form_group_id: resource_distribution + +# Package format (O) +- field_name: package_format + label: + en: Package format + es: Formato del paquete + display_snippet: schemingdcat/display_snippets/link.html + display_property: dcat:packageFormat + form_placeholder: http://publications.europa.eu/resource/authority/file-type/TAR + help_text: + en: 'The format of the file in which one or more data files are grouped together.' + es: 'Formato del fichero en el que se agrupan uno o varios ficheros de datos.' + form_group_id: resource_distribution # Resource status (O) - field_name: status @@ -2104,6 +2657,19 @@ resource_fields: help_allow_html: True form_group_id: resource_type +# Byte size (O) +- field_name: size + label: + en: Byte size + es: Tamaño en bytes + form_placeholder: 305000 + preset: file_size + display_property: dcat:byteSize + help_text: + en: 'Integer value.' + es: 'Valor entero.' + form_group_id: resource_type + # Resource language (M) - field_name: language label: @@ -2229,10 +2795,6 @@ resource_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano @@ -2247,19 +2809,6 @@ resource_fields: value: http://publications.europa.eu/resource/authority/language/GLE form_group_id: resource_identification -# Byte size (O) -- field_name: size - label: - en: Byte size - es: Tamaño en bytes - form_placeholder: 305000 - preset: file_size - display_property: dcat:byteSize - help_text: - en: 'Integer value.' - es: 'Valor entero.' - form_group_id: resource_type - # Additional format information (O) ##TODO: To profiles.py - field_name: resource_relation @@ -2271,7 +2820,20 @@ resource_fields: help_text: en: 'Link(s) related to the format, where the format, the scheme used for its representation or other technical information on how to access the documents or information resources is indicated.' es: 'Enlace(s) relacionado(s) con el formato, en dónde se indica el formato, el esquema utilizado para su representación u otra información técnica sobre cómo acceder a los documentos o recursos de información.' - form_group_id: resource_lineage + form_group_id: resource_relations + +# Additional format information (O) +- field_name: documentation + label: + en: Documentation + es: Documentación + preset: multiple_text_raws_ordered + validators: ignore_missing scheming_multiple_text + form_placeholder: 'https://example.org/some-doc.html' + help_text: + en: 'A page or document about this resource.' + es: 'Una página o documento sobre este recurso.' + form_group_id: resource_relations # Resource License (R) - field_name: license @@ -2353,6 +2915,19 @@ resource_fields: es: 'Especificaciones (e.g. OGC). URLs' form_group_id: resource_standards +# Applicable legislation (M) +- field_name: applicable_legislation + label: + en: Applicable legislation + es: Legislación aplicable + preset: multiple_text_links + display_property: dcatap:applicableLegislation + form_placeholder: 'http://data.europa.eu/eli/reg_impl/2023/138/oj' + help_text: + en: 'The legislation that mandates the creation or management of the resource.' + es: 'La legislación que ordena la creación o gestión del recurso.' + form_group_id: resource_standards + # Coordinate Reference System (C) - field_name: reference_system label: @@ -2362,8 +2937,8 @@ resource_fields: display_snippet: schemingdcat/display_snippets/link_epsg.html form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 help_text: - en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' - es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' + en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' + es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' help_allow_html: True form_group_id: resource_standards diff --git a/ckanext/schemingdcat/schemas/geodcatap/geodcatap_group.json b/ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_group.json similarity index 100% rename from ckanext/schemingdcat/schemas/geodcatap/geodcatap_group.json rename to ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_group.json diff --git a/ckanext/schemingdcat/schemas/geodcatap/geodcatap_org.json b/ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_org.json similarity index 100% rename from ckanext/schemingdcat/schemas/geodcatap/geodcatap_org.json rename to ckanext/schemingdcat/schemas/geodcat_ap/eu_geodcat_ap_org.json diff --git a/ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml b/ckanext/schemingdcat/schemas/resources/dcat_document.yaml similarity index 99% rename from ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml rename to ckanext/schemingdcat/schemas/resources/dcat_document.yaml index ea88083..1b4ffc2 100644 --- a/ckanext/schemingdcat/schemas/dcat/dcat_dataset.yaml +++ b/ckanext/schemingdcat/schemas/resources/dcat_document.yaml @@ -4,11 +4,13 @@ about: "Datasets/Distributions: Adaptation for CKAN of the Data Catalog Vocabula about_url: https://github.com/mjanez/ckanext-schemingdcat form_languages: ["en", "es"] required_language: "en" -schema_version: 2.1 -schema_date: 2024-05-01 -schema_name: dcat +schema_version: 3.0 +schema_date: 2024-08-01 +schema_name: document schema_title: DCAT schema_description: Data Catalog Vocabulary (DCAT) +schema_profile_version: 3.0.0 +schema_profile_url: https://www.w3.org/TR/vocab-dcat-3/ schema_form_groups: # Basic Info parties form_page (#1) - form_group_id: title @@ -56,18 +58,18 @@ schema_form_groups: label: en: Author information es: Información del autor - fa_icon: fa-pencil-square-o + fa_icon: fa-pencil-square # Quality form_page (#3) - form_group_id: standards label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square - form_group_id: temporal_info label: en: Timing es: Información temporal - fa_icon: fa-clock-o + fa_icon: fa-clock - form_group_id: lineage label: en: Provenance information @@ -125,7 +127,7 @@ schema_form_groups: label: en: Resource type information es: Información del tipo de recurso - fa_icon: fa-file-code-o + fa_icon: fa-file-code - form_group_id: resource_license_info label: en: License and restrictions @@ -140,7 +142,7 @@ schema_form_groups: label: en: Standards compliance es: Adecuación a estándares - fa_icon: fa-check-square-o + fa_icon: fa-check-square ### Codes in Schema # (M): Mandatory @@ -597,10 +599,6 @@ dataset_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano @@ -1866,10 +1864,6 @@ resource_fields: en: Maltese es: Maltés value: http://publications.europa.eu/resource/authority/language/MLT - - label: - en: Polish - es: Polaco - value: http://publications.europa.eu/resource/authority/language/POL - label: en: Romanian es: Rumano diff --git a/ckanext/schemingdcat/schemas/resources/doc.yaml b/ckanext/schemingdcat/schemas/resources/doc.yaml deleted file mode 100644 index 599bb83..0000000 --- a/ckanext/schemingdcat/schemas/resources/doc.yaml +++ /dev/null @@ -1,1553 +0,0 @@ -scheming_version: 2 -dataset_type: doc -about: "Datasets/Distributions: DCAT metadata profile for documents" -about_url: https://github.com/mjanez/ckanext-schemingdcat, -form_languages: ["es", "en"] -schema_version: 1.1 -schema_date: 2023-10-01 - -### Codes in Schema -# (M): Mandatory -# (R): Recommended -# (C): Conditional -# (O): Optional - -#--Dataset (dcat:Dataset) fields--# -dataset_fields: - -#--Basic info--# -- start_form_page: - title: - en: Basic Info - es: Identificación - description: - en: Basic metadata identification and reference information. - es: Información básica de identificación y referencia de los metadatos. - -# Dataset title translated (M) - field_name: title_translated - label: - en: Dataset title - es: Título del conjunto de datos - preset: schemingdcat_fluent_title_translated - required: True - display_property: dct:title - form_placeholder: - en: e.g. A descriptive title. - es: ej. Un título descriptivo. - form_languages: ["es", "en"] - required_language: "es" - -# Dataset locator (O) -## For all resources that is equivalent to this element, such as a URI (of dcat:Dataset) -- field_name: name - label: - en: URL - es: URL - preset: dataset_slug - display_property: dcat:landingPage - form_placeholder: - en: URL title Dataset - es: Título de la URL del Dataset - -# CKAN Organization (M) // Dataset privacy (M) -- field_name: owner_org - label: - en: Organization - es: Organización - required: True - help_text: - en: Entity (organisation) responsible for making the Dataset available. - es: Entidad (organización) responsable de publicar el conjunto de datos. - preset: dataset_organization - -# Graphic overview (O) -- field_name: graphic_overview - label: - en: Graphic overview of the dataset - es: Descripción gráfica del conjunto de datos - display_snippet: schemingdcat/display_snippets/graphic_overview.html - form_placeholder: http://example.com/dataset.jpg - help_text: - en: "Graphic that provides an illustration of the dataset." - es: "Gráfico que ilustra el conjunto de datos." - -# # Dataset abstract translated (M) -- field_name: notes_translated - label: - en: Abstract - es: Resumen - preset: schemingdcat_fluent_notes_translated - required: True - display_property: dct:description - form_placeholder: - en: e.g. Some useful description about the dataset. - es: ej. Una descripción útil sobre el conjunto de datos. - form_languages: ["es", "en"] - required_language: "es" - -# Dataset type (M) -- field_name: dcat_type - label: - en: Resource type - es: Tipo de recurso - preset: select - form_include_blank_choice: False - validators: not_empty scheming_required - required: True - display_property: dct:type - display_snippet: schemingdcat/display_snippets/link_schema.html - choices: - - label: - en: Collection - es: Colección - value: http://purl.org/dc/dcmitype/Collection - - label: - en: Event - es: Evento - value: http://purl.org/dc/dcmitype/Event - - label: - en: Image - es: Imagen - value: http://purl.org/dc/dcmitype/Image - - label: - en: Still Image - es: Imagen fija - value: http://purl.org/dc/dcmitype/StillImage - - label: - en: Moving Image - es: Imagen en movimiento - value: http://purl.org/dc/dcmitype/MovingImage - - label: - en: Physical Object - es: Objeto físico - value: http://purl.org/dc/dcmitype/PhysicalObject - - label: - en: Interactive Resource - es: Recurso interactivo - value: http://purl.org/dc/dcmitype/InteractiveResource - - label: - en: Sound - es: Sonido - value: http://purl.org/dc/dcmitype/Sound - - label: - en: Software - es: Software - value: http://purl.org/dc/dcmitype/Software - - label: - en: Text - es: Texto - value: http://purl.org/dc/dcmitype/Text - -# NTI-RISP Theme (M) -## Taxonomy [NTI-RISP Annex IV](http://www.boe.es/eli/es/res/2013/02/19/(4)/con#aniv) -- field_name: theme_es - label: - en: Themes (NTI-RISP) - es: Temáticas (NTI-RISP) - preset: multiple_choice_icon - display_property: dcat:theme - select_size: 10 - required: True - help_text: - en: 'Themes (NTI-RISP Annex IV)' - es: 'Temáticas (Anexo IV NTI-RISP)' - help_allow_html: True - sorted_choices: True - choices: - - value: http://datos.gob.es/kos/sector-publico/sector/ciencia-tecnologia - notation: ciencia-tecnologia - label: - en: Science and technology - es: Ciencia y tecnología - ca: Ciència i tecnologia - gl: Ciencia e tecnoloxía - eu: Zientzia eta teknologia - description: - en: '' - es: 'Incluye: Innovación, Investigación, I/u002BD/u002BI, Telecomunicaciones, - Inernet y Sociedad de la Información.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/TECH - - value: http://datos.gob.es/kos/sector-publico/sector/comercio - notation: comercio - label: - en: Commerce - es: Comercio - ca: Comerç - gl: Comercio - eu: Merkataritza - description: - en: '' - es: 'Incluye: Consumo.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON - - value: http://datos.gob.es/kos/sector-publico/sector/cultura-ocio - notation: cultura-ocio - label: - en: Culture and leisure - es: Cultura y ocio - ca: Cultura i lleure - gl: Cultura e lecer - eu: Kultura eta aisia - description: - en: '' - es: 'Incluye: Tiempo libre.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/EDUC - - value: http://datos.gob.es/kos/sector-publico/sector/demografia - notation: demografia - label: - en: Demography - es: Demografía - ca: Demografia - gl: Demografía - eu: Demografia - description: - en: '' - es: 'Incluye: Inmigración y Emigración, Familia, Mujeres, Infancia, Mayores, - Padrón.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/SOCI - - value: http://datos.gob.es/kos/sector-publico/sector/deporte - notation: deporte - label: - en: Sport - es: Deporte - ca: Esport - gl: Deporte - eu: Kirola - description: - en: '' - es: 'Incluye: Instalaciones deportivas, Federaciones, Competiciones.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/EDUC - - value: http://datos.gob.es/kos/sector-publico/sector/economia - notation: economia - label: - en: Economy - es: Economía - ca: Economia - gl: Economía - eu: Ekonomia - description: - en: '' - es: 'Incluye: Deuda, Moneda y Banca y finanzas.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON - - value: http://datos.gob.es/kos/sector-publico/sector/educacion - notation: educacion - label: - en: Education - es: Educación - ca: Educació - gl: Educación - eu: Hezkuntza - description: - en: '' - es: 'Incluye: Formación.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/EDUC - - value: http://datos.gob.es/kos/sector-publico/sector/empleo - notation: empleo - label: - en: Employment - es: Empleo - ca: Ocupació - gl: Emprego - eu: Enplegua - description: - en: '' - es: 'Incluye: Trabajo, Mercado laboral.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON - - value: http://datos.gob.es/kos/sector-publico/sector/energia - notation: energia - label: - en: Energy - es: Energía - ca: Energia - gl: Enerxía - eu: Energia - description: - en: '' - es: 'Incluye: Fuentes renovables.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ENER - - value: http://datos.gob.es/kos/sector-publico/sector/hacienda - notation: hacienda - label: - en: Treasury - es: Hacienda - ca: Hisenda - gl: Facenda - eu: Ogasuna - description: - en: '' - es: 'Incluye: Impuestos.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/GOVE - - value: http://datos.gob.es/kos/sector-publico/sector/industria - notation: industria - label: - en: Industry - es: Industria - ca: Indústria - gl: Industria - eu: Industria - description: - en: '' - es: 'Incluye: Minería.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON - - value: http://datos.gob.es/kos/sector-publico/sector/legislacion-justicia - notation: legislacion-justicia - label: - en: Legislation and justice - es: Legislación y justicia - ca: Legislació i justícia - gl: Lexislación e xustiza - eu: Legegintza eta justizia - description: - en: '' - es: 'Incluye: Registros.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/JUST - - value: http://datos.gob.es/kos/sector-publico/sector/medio-ambiente - notation: medio-ambiente - label: - en: Environment - es: Medio ambiente - ca: Medi ambient - gl: Medio ambiente - eu: Ingurumena - description: - en: '' - es: 'Incluye: Meteorología, Geografía, Conservación fauna y flora.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ENVI - - value: http://datos.gob.es/kos/sector-publico/sector/medio-rural-pesca - notation: medio-rural-pesca - label: - en: Rural environment - es: Medio Rural - ca: Medi rural - gl: Medio rural - eu: Nekazaritza - description: - en: '' - es: 'Incluye: Agricultura, Ganadería, Pesca y Silvicultura.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/AGRI - - value: http://datos.gob.es/kos/sector-publico/sector/salud - notation: salud - label: - en: Healthcare - es: Salud - ca: Salut - gl: Saúde - eu: Osasuna - description: - en: '' - es: 'Incluye: Sanidad.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/HEAL - - value: http://datos.gob.es/kos/sector-publico/sector/sector-publico - notation: sector-publico - label: - en: Public sector - es: Sector público - ca: Sector públic - gl: Sector público - eu: Sektore publikoa - description: - en: '' - es: 'Incluye: Presupuestos, Organigrama institucional, Legislación interna, - Función pública.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/GOVE - - value: http://datos.gob.es/kos/sector-publico/sector/seguridad - notation: seguridad - label: - en: Security - es: Seguridad - ca: Seguretat - gl: Seguridade - eu: Segurtasuna - description: - en: '' - es: 'Incluye: Protección civil, Defensa.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/JUST - - value: http://datos.gob.es/kos/sector-publico/sector/sociedad-bienestar - notation: sociedad-bienestar - label: - en: Society and welfare - es: Sociedad y bienestar - ca: Societat i benestar - gl: Sociedade e benestar - eu: Gizartea eta ongizatea - description: - en: '' - es: 'Incluye: Participación ciudadana, Marginación, Envejecimiento Activo, Autonomía - personal y Dependencia, Invalidez, Jubilación, Seguros y Pensiones, Prestaciones - y Subvenciones.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/SOCI - - value: http://datos.gob.es/kos/sector-publico/sector/transporte - notation: transporte - label: - en: Transport - es: Transporte - ca: Transport - gl: Transporte - eu: Garraioa - description: - en: '' - es: 'Incluye: Comunicaciones y Tr/u00E1fico.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/TRAN - - value: http://datos.gob.es/kos/sector-publico/sector/turismo - notation: turismo - label: - en: Tourism - es: Turismo - ca: Turisme - gl: Turismo - eu: Turismoa - description: - en: '' - es: 'Incluye: Alojamientos, Hostelería, Gastronomía.' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/ECON - - value: http://datos.gob.es/kos/sector-publico/sector/urbanismo-infraestructuras - notation: urbanismo-infraestructuras - label: - en: Town planning and infrastructures - es: Urbanismo e infraestructuras - ca: Urbanisme i infraestructures - gl: Urbanismo e infraestruturas - eu: Hirigintza eta azpiegiturak - description: - en: '' - es: 'Incluye: Saneamiento público, Construcción (infraestructuras, equipamientos - públicos).' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/REGI - - value: http://datos.gob.es/kos/sector-publico/sector/vivienda - notation: vivienda - label: - en: Housing - es: Vivienda - ca: Habitatge - gl: Vivenda - eu: Etxebizitza - description: - en: '' - es: 'Incluye: Mercado inmobiliario, Construcción (viviendas).' - ca: '' - gl: '' - eu: '' - dcat_ap: http://publications.europa.eu/resource/authority/data-theme/REGI - -# Metadata file identifier (M) -## Unique resource identifier (UUID) (Mandatory). If it does not exist, CKAN creates a UUID (Metadata file identifier 'package_id') -- field_name: identifier - label: - en: Metadata identifier - es: Identificador de los metadatos - preset: schemingdcat_identifier - required: True - display_property: dct:identifier - form_placeholder: 123e4567-e89b-12d3-a456-426614174000 - help_text: - en: e.g. Unique resource identifier (UUID). - es: Ej. Identificador único de recurso (UUID). - help_allow_html: True - -# Metadata file language (M) -- field_name: language - label: - en: Metadata language - es: Idioma de los metadatos - preset: select - display_property: dct:language - display_snippet: schemingdcat/display_snippets/link_schema.html - form_include_blank_choice: False - validators: not_empty scheming_required - required: True - sorted_choices: True - choices: - - label: - en: Spanish - es: Español - value: http://publications.europa.eu/resource/authority/language/SPA - - label: - en: English - es: Inglés - value: http://publications.europa.eu/resource/authority/language/ENG - -# Date of creation (O) -- field_name: created - label: - en: Date of creation - es: Fecha de creación - validators: not_empty scheming_required - display_property: dct:created - required: True - preset: date - -# Date of last revision (O) -- field_name: modified - label: - en: Date of last revision - es: Fecha de última modificación - validators: not_empty scheming_required - display_snippet: schemingdcat/display_snippets/last_update.html - display_property: dct:modified - required: True - preset: date - -# ISO 19115 topic category (M) -## Recommended (GeoDCAT-AP) / INSPIRE Mandatory as topic -- field_name: topic - label: - en: ISO 19115 topic category - es: Categoría temática ISO 19115 - preset: select - display_property: dcat:keyword - display_snippet: schemingdcat/display_snippets/link_schema.html - form_include_blank_choice: False - validators: not_empty scheming_required - required: True - sorted_choices: True - choices: - - label: biota - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/biota - - label: boundaries - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/boundaries - - label: climatologyMeteorologyAtmosphere - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/climatologyMeteorologyAtmosphere - - label: economy - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/economy - - label: elevation - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/elevation - - label: environment - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/environment - - label: farming - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/farming - - label: geoscientificInformation - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/geoscientificInformation - - label: health - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/health - - label: imageryBaseMapsEarthCover - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/imageryBaseMapsEarthCover - - label: inlandWaters - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/inlandWaters - - label: intelligenceMilitary - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/intelligenceMilitary - - label: location - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/location - - label: oceans - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/oceans - - label: planningCadastre - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/planningCadastre - - label: society - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/society - - label: structure - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/structure - - label: transportation - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/transportation - - label: utilitiesCommunication - value: http://inspire.ec.europa.eu/metadata-codelist/TopicCategory/utilitiesCommunication - - help_text: - en: 'e.g. Labels from Metadata code list register (INSPIRE)' - es: 'ej: Etiquetas del Registro de listas controladas de metadatos (INSPIRE)' - help_allow_html: True - -# Keyword value (M) -## Recommended (GeoDCAT-AP) / INSPIRE Mandatory as keywords -- field_name: tag_string - label: - en: Keywords - es: Palabras clave - preset: tag_string_autocomplete - display_property: dct:subject - form_placeholder: 'gsaa' - help_text: - en: 'e.g. Labels from Metadata code list register (INSPIRE)' - es: 'ej: Etiquetas del Registro de listas controladas de metadatos (INSPIRE)' - help_allow_html: True - -# Keyword URI (M) -## TODO: Improve form_snippet to generate tag_uri auto from tag_string -## TODO: Add as scheming_datastore_choices (helpers.py/#102) http://github.com/ckan/ckanext-scheming/issues/270 -## Only for ckanext-dcat profiles.py -- field_name: tag_uri - label: - en: Keyword URIs - es: URI de palabras clave - preset: multiple_text - display_snippet: schemingdcat/display_snippets/list_keywords.html - form_placeholder: 'http://inspire.ec.europa.eu/metadata-codelist/IACSData/gsaa' - help_text: - en: 'e.g. Metadata code list register (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' - es: 'ej: Registro de listas controladas de metadatos (INSPIRE): http://inspire.ec.europa.eu/metadata-codelist' - -# TODO: Probably better include contact_role and contact_organization (boolean) to distinguish between vcard:Individual and vcard:Organizationto use in ckanext-dcat/profiles.py -# Metadata point of contact URI (M) -- field_name: contact_uri - label: - en: URI of the Metadata contact point - es: URI del punto de contacto de los metadatos - display_snippet: schemingdcat/display_snippets/link_name.html - form_placeholder: http://orgs.vocab.org/some-org - -# Metadata point of contact name (M) -- field_name: contact_name - label: - en: Metadata contact point name - es: Nombre del punto de contacto de los metadatos - display_property: dcat:contactPoint - form_placeholder: José Blanco - -# Metadata point of contact email (M) -- field_name: contact_email - label: - en: Metadata contact point email - es: Email del punto de contacto de los Metadatos - validators: not_empty scheming_required - required: True - display_property: vcard:hasEmail - display_snippet: email.html - form_placeholder: joseblanco@example.com - -# Metadata point of contact Web (R) -- field_name: contact_url - label: - en: Website of the Metadata contact point - es: Web del punto de contacto de los metadatos - display_snippet: schemingdcat/display_snippets/link.html - display_property: vcard:hasURL - form_placeholder: http://www.example.com - -#--Responsible party--# -- start_form_page: - title: - en: Responsible party - es: Responsable - description: - en: Organization(s) responsible for the creation, management, maintenance and distribution of datasets. - es: Organización(es) responsable(s) de la creación, gestión, mantenimiento y distribución de los conjuntos de datos. - -# Publisher name (M) - field_name: publisher_name - label: - en: Name of the publisher - es: Nombre del publicador - display_property: foaf:name - form_placeholder: José Blanco - help_text: - en: "A party that makes a dataset available to others." - es: "Persona u organización que pone a disposición de otros el conjunto de datos." - -# Publisher identifier (M) -- field_name: publisher_identifier - label: - en: Identifier of the publisher - es: Identificador del publicador - display_property: dct:identifier - form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 - help_text: - en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." - es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" - help_allow_html: True - -# Publisher URI (M) -- field_name: publisher_uri - label: - en: URI of the publisher - es: URI del publicador - display_snippet: schemingdcat/display_snippets/link_name.html - form_snippet: schemingdcat/form_snippets/publisher_uri.html - form_placeholder: http://orgs.vocab.org/some-org - help_text: - en: This property refers to an Agent (organisation) responsible for making the Catalogue Record available. URI - es: Esta propiedad se refiere a un agente (organización) responsable de poner a disposición el recurso del catálogo. URI - -# Publisher email (M) -- field_name: publisher_email - label: - en: Email of the publisher - es: Email del publicador - display_property: foaf:mbox - display_snippet: email.html - form_placeholder: joseblanco@example.com - -# Publisher URL (O) -- field_name: publisher_url - label: - en: Website of the publisher - es: Web del publicador - display_property: foaf:homepage - display_snippet: schemingdcat/display_snippets/link.html - form_placeholder: http://www.example.com - help_text: - en: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL - es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL - -# Publisher type (M) -- field_name: publisher_type - label: - en: Type of the publisher - es: Tipo de publicador - preset: select - display_property: dct:type - display_snippet: schemingdcat/display_snippets/link_schema.html - choices: - - label: - en: National authority - es: Autoridad nacional - value: http://purl.org/adms/publishertype/NationalAuthority - - label: - en: Regional authority - es: Autoridad regional - value: http://purl.org/adms/publishertype/RegionalAuthority - - label: - en: Supranational authority - es: Autoridad supranacional - value: http://purl.org/adms/publishertype/SupraNationalAuthority - - label: - en: Local authority - es: Autoridad local - value: http://purl.org/adms/publishertype/LocalAuthority - - label: - en: Academia-Scientific organisation - es: Organización académica-científica - value: http://purl.org/adms/publishertype/Academia-ScientificOrganisation - - label: - en: Non profit organisation - es: Organización sin animo de lucro - value: http://purl.org/adms/publishertype/NonProfitOrganisation - - label: - en: Company - es: Empresa - value: http://purl.org/adms/publishertype/Company - - label: - en: Industry consortium - es: Consorcio industrial - value: http://purl.org/adms/publishertype/IndustryConsortium - - label: - en: Non Governmental Organisation - es: Organización no gubernamental (ONG) - value: http://purl.org/adms/publishertype/NonGovernmentalOrganisation - - label: - en: Private individual(s) - es: Individuo(s) privado(s) - value: http://purl.org/adms/publishertype/PrivateIndividual(s) - - label: - en: Standardisation body - es: Organismo de normalización - value: http://purl.org/adms/publishertype/StandardisationBody - -# Maintainer name (O) -- field_name: maintainer - label: - en: Name of the dataset maintainer - es: Nombre del mantenedor - display_property: dcat:contactPoint - form_placeholder: José Blanco - help_text: - en: "Person or organization responsible for maintaining or updating a dataset." - es: "Persona u organización responsable de mantener o actualizar un conjunto de datos." - -# Maintainer Identifier (O) -- field_name: maintainer_uri - label: - en: Identifier of the dataset maintainer - es: Identificador del mantenedor - display_snippet: schemingdcat/display_snippets/link_name.html - form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 - help_text: - en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." - es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" - help_allow_html: True - -# Maintainer email (O) -- field_name: maintainer_email - label: - en: Email of the dataset maintainer - es: Email del mantenedor - display_property: vcard:hasEmail - display_snippet: email.html - form_placeholder: joseblanco@example.com - -# Maintainer web (O) -- field_name: maintainer_url - label: - en: Website of the dataset maintainer - es: Web del mantenedor - display_property: foaf:homepage - display_snippet: schemingdcat/display_snippets/link.html - form_placeholder: http://www.example.com - help_text: - en: This property refers to a web page that acts as the maintainer's homepage. URL - es: Esta propiedad se refiere a una página web que actúa como página principal del mantenedor. URL - -# Author name (O) -- field_name: author - label: - en: Name of the dataset creator - es: Nombre del autor - display_property: dct:creator - form_placeholder: José Blanco - help_text: - en: "A party that creates or produces a particular dataset." - es: "Persona u organización creadora o productora de un conjunto de datos" - -# Author Identifier (O) -- field_name: author_uri - label: - en: Identifier of the dataset creator - es: Identificador del autor - display_snippet: schemingdcat/display_snippets/link_name.html - form_placeholder: http://datos.gob.es/recurso/sector-publico/org/Organismo/E05068001 - help_text: - en: "Unique identifier of the publisher. Spain: Unique identifier (DIR3) of the public organization (datos.gob.es)." - es: "Identificador único del publicador. España: Identificador único (DIR3) del organismo público. (datos.gob.es)" - help_allow_html: True - -# Author email (O) -- field_name: author_email - label: - en: Email of the dataset creator - es: Email del autor - display_property: vcard:hasEmail - display_snippet: email.html - form_placeholder: joseblanco@example.com - -# Author web (O) -- field_name: author_url - label: - en: Website of the dataset creator - es: Web del autor - display_property: foaf:homepage - display_snippet: schemingdcat/display_snippets/link.html - form_placeholder: http://www.example.com - help_text: - en: This property refers to a web page that acts as the author's homepage. URL - es: Esta propiedad se refiere a una página web que actúa como página principal del publicador. URL - -#--Quality--# -- start_form_page: - title: - en: Quality - es: Calidad - description: - en: Data quality information. - es: Información sobre calidad de los datos. - -# Other identifier (O)) - field_name: alternate_identifier - label: - en: Other identifier - es: Identificador alternativo - display_property: adms:identifier - form_placeholder: doi:10.1234/example-dataset - help_text: - en: 'An alternate identifier in a particular context, can express other locally minted identifiers or external identifiers, like DOI, ELI, arΧiv for creative works and ORCID, VIAF, ISNI for actors such as authors and publishers, as long as the identifiers are globally unique and stable.' - es: 'Un identificador alternativo en un contexto particular, puede expresar otros identificadores acuñados localmente o identificadores externos, como DOI, ELI, arΧiv para obras creativas y ORCID, VIAF, ISNI para actores como autores y editores, siempre que los identificadores sean globalmente únicos y estables.' - help_allow_html: True - -# # Lineage statement (M) -- field_name: provenance - label: - en: Lineage statement - es: Declaración de linaje - preset: schemingdcat_fluent_markdown - display_property: dct:provenance - form_placeholder: - en: Means the history of a data set, and the life cycle from collection and acquisition through compilation and derivation to its current form, in accordance with EN ISO-19101. - es: Historia de un conjunto de datos y su ciclo de vida desde su recogida y adquisición hasta su compilación y derivación hasta su forma actual, con arreglo a la norma EN ISO-19101. - form_languages: ["es", "en"] - -# Conformity (M) -- field_name: conforms_to - label: - en: Conformity - es: Conformidad - required: False - display_property: dct:conformsTo - preset: multiple_text_links - form_placeholder: 'http://inspire.ec.europa.eu/documents/commission-regulation-eu-no-13122014-10-december-2014-amending-regulation-eu-no-10892010-0' - help_text: - en: 'Implementing rule (e.g. INSPIRE) or other specification.URLs e.g. http://inspire.ec.europa.eu/documents/commission-regulation-eu-no-13122014-10-december-2014-amending-regulation-eu-no-10892010-0' - es: 'Conformidad con normativas (Reglamento INSPIRE) o especificaciones. URLs e.j:http://inspire.ec.europa.eu/documents/commission-regulation-eu-no-13122014-10-december-2014-amending-regulation-eu-no-10892010-0' - -# Metadata standard (M) -- field_name: metadata_profile - label: - en: Metadata Standard - es: Perfil de Metadatos - required: False - display_property: dct:conformsTo - preset: multiple_metadata_profiles - form_placeholder: 'http://semiceu.github.io/GeoDCAT-AP/releases/2.0.0' - help_text: - en: 'URI(s) of the Metadata profile used' - es: 'URI(s) del perfil de Metadatos utilizado' - -# Temporal start (O) -- field_name: temporal_start - label: - en: Temporal extent (Start) - es: Cobertura temporal (Inicio) - display_property: dct:temporal - preset: date - -# Temporal end (O) -- field_name: temporal_end - label: - en: Temporal extent (End) - es: Cobertura temporal (Fin) - display_property: dct:temporal - preset: date - -# Update frequency (O) -- field_name: frequency - label: - en: Update frequency - es: Frecuencia de actualización - preset: select - display_property: dct:accrualPeriodicity - display_snippet: schemingdcat/display_snippets/link_schema.html - sorted_choices: True - choices: - - label: - en: Annual - es: Anual - value: http://publications.europa.eu/resource/authority/frequency/ANNUAL - - label: - en: Semiannual - es: Semestral - value: http://publications.europa.eu/resource/authority/frequency/ANNUAL_2 - - label: - en: Three times a year - es: Cuatrimestral - value: http://publications.europa.eu/resource/authority/frequency/ANNUAL_3 - - label: - en: Biennial - es: Bienal - value: http://publications.europa.eu/resource/authority/frequency/BIENNIAL - - label: - en: Bimonthly - es: Bimestral - value: http://publications.europa.eu/resource/authority/frequency/BIMONTHLY - - label: - en: Biweekly - es: Quincenal - value: http://publications.europa.eu/resource/authority/frequency/BIWEEKLY - - label: - en: Continuous - es: Continuo - value: http://publications.europa.eu/resource/authority/frequency/CONT - - label: - en: Daily - es: Diario - value: http://publications.europa.eu/resource/authority/frequency/DAILY - - label: - en: Twice a day - es: Dos veces al día - value: http://publications.europa.eu/resource/authority/frequency/DAILY_2 - - label: - en: Irregular - es: Irregular - value: http://publications.europa.eu/resource/authority/frequency/IRREG - - label: - en: Monthly - es: Mensual - value: http://publications.europa.eu/resource/authority/frequency/MONTHLY - - label: - en: Semimonthly - es: Bimensual - value: http://publications.europa.eu/resource/authority/frequency/MONTHLY_2 - - label: - en: Three times a month - es: Tres veces por mes - value: http://publications.europa.eu/resource/authority/frequency/MONTHLY_3 - - label: - en: Never - es: Nunca - value: http://publications.europa.eu/resource/authority/frequency/NEVER - - label: - en: Provisional data - es: Datos provisionales - value: http://publications.europa.eu/resource/authority/frequency/OP_DATPRO - - label: - en: Quarterly - es: Trimestral - value: http://publications.europa.eu/resource/authority/frequency/QUARTERLY - - label: - en: Triennial - es: Trienal - value: http://publications.europa.eu/resource/authority/frequency/TRIENNIAL - - label: - en: Unknown - es: Desconocida - value: http://publications.europa.eu/resource/authority/frequency/UNKNOWN - - label: - en: Continuously updated - es: Continuamente actualizado - value: http://publications.europa.eu/resource/authority/frequency/UPDATE_CONT - - label: - en: Semiweekly - es: Bisemanal - value: http://publications.europa.eu/resource/authority/frequency/WEEKLY_2 - - label: - en: Three times a week - es: Tres veces por semana - value: http://publications.europa.eu/resource/authority/frequency/WEEKLY_3 - - label: - en: Quinquennial - es: Cada cinco años - value: http://publications.europa.eu/resource/authority/frequency/QUINQUENNIAL - - label: - en: Decennial - es: Cada diez años - value: http://publications.europa.eu/resource/authority/frequency/DECENNIAL - - label: - en: Hourly - es: Cada hora - value: http://publications.europa.eu/resource/authority/frequency/HOURLY - - label: - en: Quadrennial - es: Cada cuatro años - value: http://publications.europa.eu/resource/authority/frequency/QUADRENNIAL - - label: - en: Bihourly - es: Cada dos horas - value: http://publications.europa.eu/resource/authority/frequency/BIHOURLY - - label: - en: Trihourly - es: Cada tres horas - value: http://publications.europa.eu/resource/authority/frequency/TRIHOURLY - - label: - en: Bidecennial - es: Cada veinte años - value: http://publications.europa.eu/resource/authority/frequency/BIDECENNIAL - - label: - en: Tridecennial - es: Cada treinta años - value: http://publications.europa.eu/resource/authority/frequency/TRIDECENNIAL - -# Source dataset (C) -- field_name: source - label: - en: Source dataset - es: Conjunto de datos de origen - display_property: dct:source - display_snippet: schemingdcat/display_snippets/link_name.html - form_placeholder: http://example.org/catalog/en/dataset/fc21c1a5-4c02-4157-9d2f-9a2cd200f908 - help_text: - en: This property refers to a related Dataset from which the described Dataset is derived. URI - es: Esta propiedad hace referencia a un conjunto de datos relacionado del que deriva el conjunto de datos descrito. URI - -# Lineage sources (O) -- field_name: lineage_source - label: - en: Sources - es: Fuentes - display_property: dct:source - preset: multiple_text_raws_ordered - form_placeholder: Términos Municipales según el Registro Central de Cartografía. Diciembre de 2013 - help_text: - en: Information about the data source used in the creation of the data specified in the scope. Best practice is to identify the related resource by means of a URI or a string conforming to a formal identification system. - es: Información sobre la fuente de datos usada en la creación de los datos especificados en el ámbito. La mejor práctica es identificar el recurso relacionado por medio de un URI o una cadena conforme a un sistema de identificación formal. - -# Lineage process steps (M) -- field_name: lineage_process_steps - label: - en: Process steps - es: Pasos del proceso - preset: multiple_text_raws_ordered - form_placeholder: 'Selección de geometría que representa entes del mundo real.' - help_text: - en: General description of how the resource was developed or an event associated with the resource. - es: Descripción general de cómo se desarrolló el recurso o de un acontecimiento asociado al mismo. - -# Related resources (O) -- field_name: reference - label: - en: Related sources - es: Recurso(s) relacionado(s) - preset: multiple_text_links - display_property: dcat:relation - form_placeholder: 'http://example.org/catalog/dataset/ejemplo' - help_text: - en: 'URI identifying the related resource. You can include as many properties as you know of references.' - es: 'URI que identifica al recurso relacionado. Se pueden incluir tantas propiedades como referencias se conozcan.' - -# # Purpose (O) -- field_name: purpose - label: - en: Purpose - es: Propósito - form_placeholder: 'Gestión del Medio Ambiente.' - preset: schemingdcat_fluent_text - help_text: - en: 'Summary of the intentions for which the dataset was developed (ISO 19115).' - es: 'Resumen de las intenciones para las que se desarrolló el conjunto de datos (ISO 19115).' - form_languages: ["es", "en"] - -# Character encoding (C) -- field_name: encoding - label: - en: Character encoding - es: Codificación - display_property: cnt:characterEncoding - form_placeholder: UTF-8 - help_text: - en: 'Character encoding in ISO-19115 metadata is specified with a code list that can be mapped to the corresponding codes in [IANA-CHARSETS]' - es: 'La codificación de caracteres en los metadatos ISO-19115 se especifica con una lista de códigos que puede asignarse a los códigos correspondientes en [IANA-CHARSETS].' - help_allow_html: True - -##TODO: temporal_resolution -## ISO 8601: http://www.google.com/url?q=http://www.w3.org/TR/xmlschema11-2/%23duration&sa=D&source=editors&ust=1677159514756434&usg=AOvVaw3Xyh6wn0UVcwFCy3-_9P8i - -#--License--# -- start_form_page: - title: - en: License info - es: Licencia - description: - en: Information on licenses and restrictions on use and access. - es: Información sobre licencias y restricciones de uso y acceso. - -# License URI (M) - field_name: license_id - label: - en: License - es: Licencia - form_snippet: license.html - display_property: dct:license - help_text: - en: 'License definitions and additional information can be found at: Open Definition' - es: 'Las definiciones de las licencias y la información adicional pueden encontrarse en: Open Definition' - help_allow_html: True - -# Conditions for access and use and limitations on public access (M) -- field_name: access_rights - label: - en: Access Rights - es: Derechos de acceso - preset: select - display_snippet: schemingdcat/display_snippets/link_schema.html - display_property: dct:accessRights - form_include_blank_choice: False - choices: - - label: - en: No limitations to public access - es: No hay limitaciones al acceso del público - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/noLimitations - - label: - en: Public access limited according to Article 13(1)(a) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(a) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1a - - label: - en: Public access limited according to Article 13(1)(b) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(b) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1b - - label: - en: Public access limited according to Article 13(1)(c) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(c) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1c - - label: - en: Public access limited according to Article 13(1)(d) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(d) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1d - - label: - en: Public access limited according to Article 13(1)(e) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(e) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1e - - label: - en: Public access limited according to Article 13(1)(f) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(f) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1f - - label: - en: Public access limited according to Article 13(1)(g) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(g) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1g - - label: - en: Public access limited according to Article 13(1)(h) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(h) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1h - help_text: - en: 'Conditions for access and use and limitations on public access (INSPIRE)' - es: 'Condiciones de acceso y utilización y limitaciones de acceso público (INSPIRE)' - help_allow_html: True - -# Version number (O) -- field_name: version - label: - en: Version - es: Versión - help_text: - en: Version number or other version designation of the Dataset. - es: Número de versión u otra designación de versión del conjunto de datos. - display_property: owl:versionInfo - validators: ignore_missing unicode_safe package_version_validator - form_placeholder: '1.0' - -# Version information (O) -- field_name: version_notes - label: - en: Version notes - es: Notas sobre la versión - help_text: - en: A description of the differences between this version and a previous version of the Dataset. - es: Una descripción de las diferencias entre esta versión y una versión anterior del Dataset. - display_property: adms:versionNotes - form_snippet: markdown.html - form_placeholder: - en: e.g. Some useful version notes about the dataset. - es: ej. Una descripción útil sobre las diferencias de esta versión del conjunto de datos. - -# Dataset validity (O) -##TODO: To profiles.py -- field_name: valid - label: - en: Dataset validity - es: Vigencia del conjunto de datos - display_property: dct:valid - preset: date - - -#--Resource/Distribution (dcat:Distribution) fields--# -resource_fields: - -# Access URL (M) -- field_name: url - label: - en: Access URL - es: URL de acceso - preset: resource_url_upload - display_property: dcat:accessURL - display_snippet: schemingdcat/display_snippets/link.html - -# Resource title (M) -- field_name: name - label: - en: Distribution title - es: Título de la distribución - form_placeholder: - en: e.g. Web Map Service - es: ej. Web Map Service - display_property: dct:title - -# Resource abstract (M) -- field_name: description - label: - en: Distribution abstract - es: Descripción de la distribución - form_snippet: markdown.html - form_placeholder: - en: Some useful notes about the data. - es: Algunas notas útiles sobre los datos. - display_property: dct:description - -# Date of creation (M) -- field_name: created - label: - en: Date of creation - es: Fecha de creación - display_property: dct:created - preset: date - -# Date of last revision (M) -- field_name: modified - label: - en: Date of last revision - es: Fecha de última modificación - display_property: dct:modified - preset: date - -# Resource status (O) -- field_name: availability - label: - en: Resource availability - es: Disponibilidad de la distribución - preset: select - display_snippet: schemingdcat/display_snippets/link_schema.html - display_property: dcatap:availability - form_include_blank_choice: False - choices: - - label: - en: Available - es: Disponible - value: http://publications.europa.eu/resource/authority/planned-availability/AVAILABLE - - label: - en: Stable - es: Estable - value: http://publications.europa.eu/resource/authority/planned-availability/STABLE - - label: - en: Experimental - es: Experimental - value: http://publications.europa.eu/resource/authority/planned-availability/EXPERIMENTAL - - label: - en: Provisional data - es: Datos provisionales - value: http://publications.europa.eu/resource/authority/planned-availability/OP_DATPRO - - label: - en: Temporary - es: Temporal - value: http://publications.europa.eu/resource/authority/planned-availability/TEMPORARY - help_text: - en: 'This property indicates how long it is planned to keep the Distribution of the Dataset available acording to Distribution availability vocabulary.' - es: 'Esta propiedad indica durante cuánto tiempo se prevé mantener disponible la distribución del conjunto de datos de acuerdo con el Vocabulario de disponibilidad de la distribución.' - help_allow_html: True - -# Resource format (O) -- field_name: format - label: - en: Format - es: Formato - preset: resource_format_autocomplete - display_property: dct:format - -# Media type (O) -- field_name: mimetype - label: - en: Media type - es: Tipo de medio - display_snippet: schemingdcat/display_snippets/link.html - display_property: dct:MediaType - form_placeholder: http://www.iana.org/assignments/media-types/application/vnd.shp - help_text: - en: 'This property refers to the media type of the Distribution as defined in the official register of media types (IANA)' - es: 'Esta propiedad se refiere al tipo de medio de la Distribución tal y como se define en el registro oficial de tipos de medios (IANA)' - help_allow_html: True - -# Resource status (O) -- field_name: status - label: - en: Resource status - es: Estado de la distribución - preset: select - display_snippet: schemingdcat/display_snippets/link_schema.html - display_property: adms:status - form_include_blank_choice: False - choices: - - label: - en: Completed - es: Completado - value: http://purl.org/adms/status/Completed - - label: - en: Under development - es: En desarrollo - value: http://purl.org/adms/status/UnderDevelopment - - label: - en: Deprecated - es: Obsoleto - value: http://purl.org/adms/status/Deprecated - - label: - en: Withdrawn - es: Retirado - value: http://purl.org/adms/status/Withdrawn - help_text: - en: 'This property refers to the maturity of the Distribution. It MUST take one of the values from the ADMS status list.' - es: 'Esta propiedad hace referencia a la madurez de la distribución y debe tomar uno de los valores de la lista ADMS status.' - help_allow_html: True - -# Resource character encoding (C) -- field_name: encoding - label: - en: Character encoding - es: Codificación - display_property: cnt:characterEncoding - form_placeholder: UTF-8 - help_text: - en: 'Character encoding in ISO-19115 metadata is specified with a code list that can be mapped to the corresponding codes in [IANA-CHARSETS]' - es: 'La codificación de caracteres en los metadatos ISO-19115 se especifica con una lista de códigos que puede asignarse a los códigos correspondientes en [IANA-CHARSETS].' - help_allow_html: True - -# Resource language (M) -- field_name: language - label: - en: Resource language - es: Idioma de la distribución - preset: select - display_property: dct:language - display_snippet: schemingdcat/display_snippets/link_schema.html - choices: - - label: - en: Spanish - es: Español - value: http://publications.europa.eu/resource/authority/language/SPA - - label: - en: English - es: Inglés - value: http://publications.europa.eu/resource/authority/language/ENG - -# Byte size (O) -##TODO: validator integer and default value=Null -# - field_name: size -# label: -# en: Byte size -# es: Tamaño en bytes -# form_placeholder: 305000 -# required: True -# display_property: dcat:byteSize -# help_text: -# en: 'Integer value.' -# es: 'Valor entero.' - -# Additional format information (O) -##TODO: To profiles.py -- field_name: resource_relation - label: - en: Additional format information - es: Información adicional sobre el formato - preset: multiple_text_raws_ordered - form_placeholder: 'http://www.catastro.minhap.es/ayuda/lang/castellano/ayuda_descarga_shape.htm' - help_text: - en: 'Link(s) related to the format, where the format, the scheme used for its representation or other technical information on how to access the documents or information resources is indicated.' - es: 'Enlace(s) relacionado(s) con el formato, en dónde se indica el formato, el esquema utilizado para su representación u otra información técnica sobre cómo acceder a los documentos o recursos de información.' - -# Resource License (R) -- field_name: license - label: - en: Distribution license - es: Licencia de la distribución - display_property: dct:license - form_placeholder: - en: e.g. http://creativecommons.org/licenses/by/4.0/ - es: ej. http://creativecommons.org/licenses/by/4.0/ - help_text: - en: 'License definitions and additional information can be found at: Open Definition' - es: 'Las definiciones de las licencias y la información adicional pueden encontrarse en: Open Definition' - help_allow_html: True - -# Resource limitations on public access (M) -- field_name: rights - label: - en: Resource access Rights - es: Derechos de acceso del recurso - preset: select - display_snippet: schemingdcat/display_snippets/link_schema.html - display_property: dct:accessRights - form_include_blank_choice: False - choices: - - label: - en: No limitations to public access - es: No hay limitaciones al acceso del público - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/noLimitations - - label: - en: Public access limited according to Article 13(1)(a) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(a) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1a - - label: - en: Public access limited according to Article 13(1)(b) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(b) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1b - - label: - en: Public access limited according to Article 13(1)(c) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(c) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1c - - label: - en: Public access limited according to Article 13(1)(d) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(d) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1d - - label: - en: Public access limited according to Article 13(1)(e) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(e) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1e - - label: - en: Public access limited according to Article 13(1)(f) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(f) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1f - - label: - en: Public access limited according to Article 13(1)(g) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(g) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1g - - label: - en: Public access limited according to Article 13(1)(h) of the INSPIRE Directive - es: Acceso público limitado según el artículo 13(1)(h) de la Directiva INSPIRE - value: http://inspire.ec.europa.eu/metadata-codelist/LimitationsOnPublicAccess/INSPIRE_Directive_Article13_1h - help_text: - en: 'Conditions for access and use and limitations on public access (INSPIRE)' - es: 'Condiciones de acceso y utilización y limitaciones de acceso público (INSPIRE)' - help_allow_html: True - -# Conformity (M) -- field_name: conforms_to - label: - en: Conformity - es: Conformidad - preset: multiple_text_links - display_property: dct:conformsTo - form_placeholder: 'http://www.opengeospatial.org/standards/wms' - help_text: - en: 'Specification (e.g. OGC). URLs' - es: 'Especificaciones (e.g. OGC). URLs' - -# Coordinate Reference System (C) -- field_name: reference_system - label: - en: Coordinate Reference System - es: Sistema de Referencia de Coordenadas - validators: ignore_missing schemingdcat_valid_url - display_snippet: schemingdcat/display_snippets/link_epsg.html - form_placeholder: http://www.opengis.net/def/crs/EPSG/0/4326 - help_text: - en: 'EPSG URI system for identifying position in the real world [ISO 19112]. The URI prefix for coordinate reference systems is the following one: http://www.opengis.net/def/crs/EPSG/0/{EPSG Code}' - es: 'URI EPSG del sistema para identificar la posición en el mundo real [ISO 19112]. El prefijo URI para los sistemas de referencia de coordenadas es el siguiente: http://www.opengis.net/def/crs/EPSG/0/{Código EPSG}' - help_allow_html: True - -# Lineage statement (O) -##TODO: provenance - -# Lineage process steps (O) -##TODO: lineage_process_steps diff --git a/ckanext/schemingdcat/schemas/scheming/camel_photos.yaml b/ckanext/schemingdcat/schemas/scheming/camel_photos.yaml deleted file mode 100644 index 7d2ecde..0000000 --- a/ckanext/schemingdcat/schemas/scheming/camel_photos.yaml +++ /dev/null @@ -1,77 +0,0 @@ -scheming_version: 2 -dataset_type: camel-photos -about_url: http://example.com/the-camel-photos-schema - - -dataset_fields: - -- field_name: title - label: Title - preset: title - form_placeholder: eg. Larry, Peter, Susan - -- field_name: name - label: URL - preset: dataset_slug - form_placeholder: eg. camel-no-5 - -- field_name: humps - label: Humps - validators: ignore_missing int_validator - form_placeholder: eg. 2 - -- field_name: category - label: Category - help_text: Make and model - help_inline: true - preset: select - choices: - - value: bactrian - label: Bactrian Camel - - value: hybrid - label: Hybrid Camel - - value: f2hybrid - label: F2 Hybrid Camel - - value: snowwhite - label: Snow-white Dromedary - - value: black - label: Black Camel - -- field_name: personality - label: Personality - preset: multiple_checkbox - choices: - - value: friendly - label: Often friendly - - value: jealous - label: Jealous of others - - value: spits - label: Tends to spit - -- field_name: other - label: - en: Other information - output_validators: ignore_missing - - -resource_fields: - -- field_name: url - label: Photo - preset: resource_url_upload - form_placeholder: http://example.com/my-camel-photo.jpg - upload_label: Photo - -- field_name: camels_in_photo - label: Camels in Photo - validators: ignore_missing int_validator - form_placeholder: eg. 2 - -- field_name: others_in_photo - label: Other Thing in Photo - output_validators: ignore_missing - -- field_name: datetime - label: Date Taken - label_time: Time Taken - preset: datetime diff --git a/ckanext/schemingdcat/schemas/scheming/ckan_dataset.yaml b/ckanext/schemingdcat/schemas/scheming/ckan_dataset.yaml deleted file mode 100644 index 9559ec7..0000000 --- a/ckanext/schemingdcat/schemas/scheming/ckan_dataset.yaml +++ /dev/null @@ -1,91 +0,0 @@ -scheming_version: 2 -dataset_type: dataset -about: A reimplementation of the default CKAN dataset schema -about_url: http://github.com/ckan/ckanext-scheming - - -dataset_fields: - -- field_name: title - label: Title - preset: title - form_placeholder: eg. A descriptive title - -- field_name: name - label: URL - preset: dataset_slug - form_placeholder: eg. my-dataset - -- field_name: notes - label: Description - form_snippet: markdown.html - form_placeholder: eg. Some useful notes about the data - -- field_name: tag_string - label: Tags - preset: tag_string_autocomplete - form_placeholder: eg. economy, mental health, government - -- field_name: license_id - label: License - form_snippet: license.html - help_text: License definitions and additional information can be found at http://opendefinition.org/ - -- field_name: owner_org - label: Organization - preset: dataset_organization - -- field_name: url - label: Source - form_placeholder: http://example.com/dataset.json - display_property: foaf:homepage - display_snippet: link.html - -- field_name: version - label: Version - validators: ignore_missing unicode_safe package_version_validator - form_placeholder: '1.0' - -- field_name: author - label: Author - form_placeholder: Joe Bloggs - display_property: dc:creator - -- field_name: author_email - label: Author Email - form_placeholder: joe@example.com - display_property: dc:creator - display_snippet: email.html - display_email_name_field: author - -- field_name: maintainer - label: Maintainer - form_placeholder: Joe Bloggs - display_property: dc:contributor - -- field_name: maintainer_email - label: Maintainer Email - form_placeholder: joe@example.com - display_property: dc:contributor - display_snippet: email.html - display_email_name_field: maintainer - - -resource_fields: - -- field_name: url - label: URL - preset: resource_url_upload - -- field_name: name - label: Name - form_placeholder: eg. January 2011 Gold Prices - -- field_name: description - label: Description - form_snippet: markdown.html - form_placeholder: Some useful notes about the data - -- field_name: format - label: Format - preset: resource_format_autocomplete diff --git a/ckanext/schemingdcat/schemas/scheming/ckan_formpages.yaml b/ckanext/schemingdcat/schemas/scheming/ckan_formpages.yaml deleted file mode 100644 index 76864eb..0000000 --- a/ckanext/schemingdcat/schemas/scheming/ckan_formpages.yaml +++ /dev/null @@ -1,106 +0,0 @@ -scheming_version: 2 -dataset_type: formpages -about: The default CKAN dataset schema with form split across multiple pages -about_url: http://github.com/ckan/ckanext-scheming - - -dataset_fields: - -- start_form_page: - title: Basic Info - description: Required and core dataset fields - - field_name: title - label: Title - preset: title - form_placeholder: eg. A descriptive title - -- field_name: name - label: URL - preset: dataset_slug - form_placeholder: eg. my-dataset - -- field_name: notes - label: Description - form_snippet: markdown.html - form_placeholder: eg. Some useful notes about the data - -- field_name: owner_org - label: Organization - preset: dataset_organization - -- start_form_page: - title: Detailed Info - description: - These fields improve search and give users important links - - field_name: tag_string - label: Tags - preset: tag_string_autocomplete - form_placeholder: eg. economy, mental health, government - -- field_name: license_id - label: License - form_snippet: license.html - help_text: License definitions and additional information can be found at http://opendefinition.org/ - -- field_name: url - label: Source - form_placeholder: http://example.com/dataset.json - display_property: foaf:homepage - display_snippet: link.html - -- field_name: version - label: Version - validators: ignore_missing unicode_safe package_version_validator - form_placeholder: '1.0' - -- start_form_page: - title: Contact Info - description: Names and email addresses for this dataset - - field_name: author - label: Author - form_placeholder: Joe Bloggs - display_property: dc:creator - -- field_name: author_email - label: Author Email - form_placeholder: joe@example.com - display_property: dc:creator - display_snippet: email.html - display_email_name_field: author - validators: ignore_missing unicode_safe strip_value email_validator - -- field_name: maintainer - label: Maintainer - form_placeholder: Joe Bloggs - display_property: dc:contributor - -- field_name: maintainer_email - label: Maintainer Email - form_placeholder: joe@example.com - display_property: dc:contributor - display_snippet: email.html - display_email_name_field: maintainer - validators: ignore_missing unicode_safe strip_value email_validator - - -resource_fields: - -- field_name: url - label: URL - preset: resource_url_upload - -- field_name: name - label: Name - form_placeholder: eg. January 2011 Gold Prices - -- field_name: description - label: Description - form_snippet: markdown.html - form_placeholder: Some useful notes about the data - -- field_name: format - label: Format - preset: resource_format_autocomplete \ No newline at end of file diff --git a/ckanext/schemingdcat/schemas/scheming/codelist.json b/ckanext/schemingdcat/schemas/scheming/codelist.json deleted file mode 100644 index 69833d8..0000000 --- a/ckanext/schemingdcat/schemas/scheming/codelist.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "scheming_version": 1, - "dataset_type": "codelist", - "about": "An example of a dataset type with no resources permitted", - "about_url": "http://github.com/ckan/ckanext-scheming", - "dataset_fields": [ - { - "field_name": "title", - "label": "Code label", - "preset": "title", - "form_placeholder": "eg. Freshwater fish" - }, - { - "field_name": "name", - "label": "Code value", - "preset": "dataset_slug", - "form_placeholder": "eg. freshwater-fish" - } - ] -} diff --git a/ckanext/schemingdcat/schemas/scheming/custom_group_with_status.json b/ckanext/schemingdcat/schemas/scheming/custom_group_with_status.json deleted file mode 100644 index 186ca22..0000000 --- a/ckanext/schemingdcat/schemas/scheming/custom_group_with_status.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "scheming_version": 1, - "group_type": "theme", - "about_url": "http://github.com/ckan/ckanext-scheming", - "fields": [ - { - "field_name": "title", - "label": "Name", - "validators": "ignore_missing unicode_safe", - "form_snippet": "large_text.html", - "form_attrs": {"data-module": "slug-preview-target"}, - "form_placeholder": "My theme" - }, - { - "field_name": "name", - "label": "URL", - "validators": "not_empty unicode_safe name_validator group_name_validator", - "form_snippet": "slug.html", - "form_placeholder": "my-theme" - }, - { - "field_name": "notes", - "label": "Description", - "form_snippet": "markdown.html", - "form_placeholder": "A little information about my group..." - }, - { - "field_name": "url", - "label": "Image URL", - "form_placeholder": "http://example.com/my-image.jpg" - }, - { - "field_name": "status", - "label": "Status", - "output_validators": "ignore_missing", - "choices": [ - { - "label": "In Progress", - "value": "in-progress" - }, - { - "label": "Final", - "value": "final" - } - ] - } - ] -} diff --git a/ckanext/schemingdcat/schemas/scheming/custom_org_with_address.json b/ckanext/schemingdcat/schemas/scheming/custom_org_with_address.json deleted file mode 100644 index 6f6926b..0000000 --- a/ckanext/schemingdcat/schemas/scheming/custom_org_with_address.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "scheming_version": 1, - "organization_type": "publisher", - "about_url": "http://github.com/ckan/ckanext-scheming", - "fields": [ - { - "field_name": "title", - "label": "Name", - "validators": "ignore_missing unicode_safe", - "form_snippet": "large_text.html", - "form_attrs": {"data-module": "slug-preview-target"}, - "form_placeholder": "My theme" - }, - { - "field_name": "name", - "label": "URL", - "validators": "not_empty unicode_safe name_validator group_name_validator", - "form_snippet": "slug.html", - "form_placeholder": "my-theme" - }, - { - "field_name": "notes", - "label": "Description", - "form_snippet": "markdown.html", - "form_placeholder": "A little information about my group..." - }, - { - "field_name": "url", - "label": "Image URL", - "form_placeholder": "http://example.com/my-image.jpg" - }, - { - "field_name": "address", - "label": "Address", - "output_validators": "ignore_missing" - } - ] -} diff --git a/ckanext/schemingdcat/schemas/scheming/group_with_bookface.json b/ckanext/schemingdcat/schemas/scheming/group_with_bookface.json deleted file mode 100644 index 05c6b05..0000000 --- a/ckanext/schemingdcat/schemas/scheming/group_with_bookface.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "scheming_version": 1, - "group_type": "group", - "about_url": "http://github.com/ckan/ckanext-scheming", - "fields": [ - { - "field_name": "title", - "label": "Name", - "validators": "ignore_missing unicode_safe", - "form_snippet": "large_text.html", - "form_attrs": {"data-module": "slug-preview-target"}, - "form_placeholder": "My Organization" - }, - { - "field_name": "name", - "label": "URL", - "validators": "not_empty unicode_safe name_validator group_name_validator", - "form_snippet": "slug.html", - "form_placeholder": "my-organization" - }, - { - "field_name": "notes", - "label": "Description", - "form_snippet": "markdown.html", - "form_placeholder": "A little information about my organization..." - }, - { - "field_name": "url", - "label": "Image URL", - "form_placeholder": "http://example.com/my-image.jpg" - }, - { - "field_name": "bookface", - "label": "Bookface", - "form_placeholder": "http://bookface.example.com/ourgroup", - "output_validators": "ignore_missing" - } - ] -} diff --git a/ckanext/schemingdcat/schemas/scheming/org_with_dept_id.json b/ckanext/schemingdcat/schemas/scheming/org_with_dept_id.json deleted file mode 100644 index c629cd8..0000000 --- a/ckanext/schemingdcat/schemas/scheming/org_with_dept_id.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "scheming_version": 1, - "organization_type": "organization", - "about_url": "http://github.com/ckan/ckanext-scheming", - "fields": [ - { - "field_name": "title", - "label": "Name", - "validators": "ignore_missing unicode_safe", - "form_snippet": "large_text.html", - "form_attrs": {"data-module": "slug-preview-target"}, - "form_placeholder": "My Organization" - }, - { - "field_name": "name", - "label": "URL", - "validators": "not_empty unicode_safe name_validator group_name_validator", - "form_snippet": "slug.html", - "form_placeholder": "my-organization" - }, - { - "field_name": "notes", - "label": "Description", - "form_snippet": "markdown.html", - "form_placeholder": "A little information about my organization..." - }, - { - "field_name": "url", - "label": "Image URL", - "form_placeholder": "http://example.com/my-image.jpg" - }, - { - "field_name": "department_id", - "label": "Department ID", - "form_placeholder": "e.g. 1042" - } - ] -} diff --git a/ckanext/schemingdcat/schemas/scheming/subfields.yaml b/ckanext/schemingdcat/schemas/scheming/subfields.yaml deleted file mode 100644 index 357310f..0000000 --- a/ckanext/schemingdcat/schemas/scheming/subfields.yaml +++ /dev/null @@ -1,117 +0,0 @@ -scheming_version: 2 -dataset_type: subfields -about: Example dataset schema with simple and repeating subfields -about_url: https://github.com/ckan/ckanext-scheming - - -dataset_fields: - -- field_name: title - label: Title - preset: title - form_placeholder: eg. A descriptive title - required: True - -- field_name: name - label: URL - preset: dataset_slug - form_placeholder: eg. my-dataset - -- field_name: notes - label: Description - form_snippet: markdown.html - form_placeholder: eg. Some useful notes about the data - required: True - -- field_name: owner_org - label: Organization - preset: dataset_organization - -- field_name: license_id - label: License - form_snippet: license.html - help_text: License definitions and additional information can be found at http://opendefinition.org/ - -- field_name: citation - label: Citation - repeating_subfields: - - field_name: originator - label: Originator - preset: multiple_text - form_blanks: 3 - required: true - - field_name: publication_date - label: Publication Date - preset: date - - field_name: online_linkage - label: Online Linkage - preset: multiple_text - form_blanks: 2 - -- field_name: contact_address - label: Contact Address - repeating_subfields: - - field_name: address - label: Address - required: true - - field_name: city - label: City - - field_name: state - label: State - - field_name: postal_code - label: Postal Code - - field_name: country - label: Country - - -resource_fields: - -- field_name: url - label: URL - preset: resource_url_upload - -- field_name: name - label: Title - form_placeholder: Descriptive name of the resource. - -- field_name: description - label: Description - form_snippet: markdown.html - form_placeholder: Summary explanation of file contents, purpose, origination, methods and usage guidance. - -- field_name: schedule - label: Schedule - repeating_subfields: - - field_name: impact - label: Impact - preset: select - choices: - - label: All - value: A - - label: Partial - value: P - - label: Corrections - value: C - required: true - - field_name: frequency - label: Frequency - preset: select - choices: - - label: Daily - value: 1d - - label: Weekly - value: 7d - - label: Monthly - value: 1m - - label: Quarterly - value: 3m - - label: Semiannual - value: 6m - - label: Annual - value: 1y - - label: Decennial - value: 10y - -- field_name: format - label: Format - preset: resource_format_autocomplete diff --git a/ckanext/schemingdcat/subscriptions.py b/ckanext/schemingdcat/subscriptions.py new file mode 100644 index 0000000..06d633b --- /dev/null +++ b/ckanext/schemingdcat/subscriptions.py @@ -0,0 +1,46 @@ +from __future__ import annotations +import logging +from typing import Any + +import ckan.plugins as p +from ckan import types + +import ckanext.schemingdcat.config as sdct_config +from ckanext.schemingdcat.helpers import schemingdcat_update_open_data_statistics + +log = logging.getLogger(__name__) + +def get_subscriptions(): + return { + p.toolkit.signals.action_succeeded: [ + {"sender": "bulk_update_public", "receiver": stats_changed}, + {"sender": "bulk_update_private", "receiver": stats_changed}, + {"sender": "bulk_update_delete", "receiver": stats_changed}, + {"sender": "package_create", "receiver": stats_changed}, + {"sender": "package_update", "receiver": stats_changed}, + {"sender": "package_delete", "receiver": stats_changed}, + {"sender": "group_create", "receiver": stats_changed}, + {"sender": "group_update", "receiver": stats_changed}, + {"sender": "group_delete", "receiver": stats_changed}, + {"sender": "organization_create", "receiver": stats_changed}, + {"sender": "organization_update", "receiver": stats_changed}, + {"sender": "organization_delete", "receiver": stats_changed}, + ] + } + +def stats_changed(sender: str, **kwargs: Any): + """ + Handles the event when certain actions are performed and updates site statistics. + + Args: + sender (str): The name of the sender that triggered the event. + **kwargs (Any): Additional keyword arguments passed to the function. + + Raises: + Exception: If updating site statistics fails, an error is logged. + """ + try: + schemingdcat_update_open_data_statistics() + log.debug(f"[{sender}] -> Update Open Data site statistics") + except Exception as e: + log.error(f"Failed to Update Open Data site statistics: {e}") \ No newline at end of file diff --git a/ckanext/schemingdcat/templates/admin/config.html b/ckanext/schemingdcat/templates/admin/config.html index 12e3e0d..6726c1d 100644 --- a/ckanext/schemingdcat/templates/admin/config.html +++ b/ckanext/schemingdcat/templates/admin/config.html @@ -1,4 +1,38 @@ {% ckan_extends %} + +{% block primary_content_inner %} + + {{ form.errors(error_summary) }} + +
+ {% block admin_form %} + {{ h.csrf_input() }} + + {{ form.input('ckan.site_title', id='field-ckan-site-title', label=_('Site Title'), value=data['ckan.site_title'], error=error, classes=['control-medium']) }} + + {{ form.input('ckan.theme', id='field-ckan-main-css', label=_('Custom Stylesheet'), value=data['ckan.theme'], error=error, classes=['control-medium']) }} + + {{ form.input('ckan.site_description', id='field-ckan-site-description', label=_('Site Tag Line'), value=data['ckan.site_description'], error=error, classes=['control-medium']) }} + + {% set field_url = 'ckan.site_logo' %} + {% set is_upload = data[field_url] and not data[field_url].startswith('http') %} + {% set is_url = data[field_url] and data[field_url].startswith('http') %} + {{ form.image_upload(data, errors, is_upload_enabled=h.uploads_enabled(), is_url=is_url, is_upload=is_upload, upload_label = _('Site logo'), url_label=_('Site logo'), field_url=field_url, field_upload='logo_upload', field_clear='clear_logo_upload' )}} + + {{ form.markdown('ckan.site_about', id='field-ckan-site-about', label=_('About'), value=data['ckan.site_about'], error=error, placeholder=_('About page text')) }} + + {{ form.markdown('ckan.site_intro_text', id='field-ckan-site-intro-text', label=_('Intro Text'), value=data['ckan.site_intro_text'], error=error, placeholder=_('Text on home page')) }} + + {{ form.textarea('ckan.site_custom_css', id='field-ckan-site-custom-css', label=_('Custom CSS'), value=data['ckan.site_custom_css'], error=error, placeholder=_('Customisable css inserted into the page header')) }} + + {% endblock %} +
+ {{ _('Reset') }} + +
+
+{% endblock %} + {% block secondary_content %}

@@ -51,9 +85,22 @@

{{ _('Standard CKAN settings') }}

{{ _('Custom CSS') }}: {{ _('This can be used for custom CSS on a CKAN site.') }}

-

{{ _('Homepage') }}: - {{ _('This is for choosing a predefined layout for the modules that appear on your homepage.') }}

{% endblock %} + + {% set docs_url = "http://docs.ckan.org/en/{0}/sysadmin-guide.html".format(g.ckan_doc_version) %} + + {% block admin_tip %} + {% set quote_content %} + {% trans %} + For guidance on configuration options, see the CKAN + {% endtrans %} + + {% trans %}sysadmin guide{% endtrans %} + . + {% endset %} + {% snippet "schemingdcat/snippets/quote_alerts.html", alert_type='tip', content=quote_content %} + {% endblock %} +
{% endblock %} \ No newline at end of file diff --git a/ckanext/schemingdcat/templates/admin/index.html b/ckanext/schemingdcat/templates/admin/index.html new file mode 100644 index 0000000..ecba6e2 --- /dev/null +++ b/ckanext/schemingdcat/templates/admin/index.html @@ -0,0 +1,43 @@ +{% ckan_extends %} + +{% block primary_content_inner %} + {{ super() }} + + {% block admin_caution %} + {% set quote_content %} + {% trans %} + As a sysadmin user you have full control over this CKAN instance. Proceed with care! + {% endtrans %} + {% endset %} + {% snippet "schemingdcat/snippets/quote_alerts.html", alert_type='caution', content=quote_content %} + {% endblock %} +{% endblock %} + +{% block secondary_content %} +
+

+ + {{ _('Administer CKAN') }} +

+
+ {% set docs_url = "http://docs.ckan.org/en/{0}/sysadmin-guide.html".format(g.ckan_doc_version) %} + + {%trans %} +

A sysadmin user can access and edit any organizations, view and change user details, and permanently delete datasets. You should carefully consider who has access to a sysadmin account on your CKAN system.

+ {% endtrans %} + + {% block admin_tip %} + {% set quote_content %} + {% trans %} + For guidance on using sysadmin features, see the CKAN + {% endtrans %} + + {% trans %}sysadmin guide{% endtrans %} + . + {% endset %} + {% snippet "schemingdcat/snippets/quote_alerts.html", alert_type='tip', content=quote_content %} + {% endblock %} + +
+
+{% endblock %} \ No newline at end of file diff --git a/ckanext/schemingdcat/templates/admin/trash.html b/ckanext/schemingdcat/templates/admin/trash.html index fefc7be..69ed9c4 100644 --- a/ckanext/schemingdcat/templates/admin/trash.html +++ b/ckanext/schemingdcat/templates/admin/trash.html @@ -2,15 +2,15 @@ {% block primary_content_inner %}
- {{ h.csrf_input() }} + {{ h.csrf_input() if 'csrf_input' in h }} diff --git a/ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html b/ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html index c32c040..e77b964 100644 --- a/ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html +++ b/ckanext/schemingdcat/templates/ajax_snippets/scd_api_info.html @@ -1,112 +1,117 @@ {# - Displays information about accessing a resource via the API. - - resource_id - The resource id - embedded - If true will not include the "modal" classes on the snippet. - - Example - - {% snippet 'ajax_snippets/api_info.html', resource_id=resource_id, embedded=true %} - - #} - - {% set resource_id = h.sanitize_id(resource_id) %} - {% set sql_example_url = h.url_for(controller='api', action='action', ver=3, logic_function='datastore_search_sql', qualified=True) + '?sql=SELECT * from "' + resource_id + '" WHERE title LIKE \'medio-ambiente\'' %} - {# not urlencoding the sql because its clearer #} - -