Extension Resource Docs


Extension Basics

Title
Resource Docs
Name
ckanext-resource-docs
Type
Public extension
Description
Attach flexible data dictionary (resource documentation) to any resource with optional JSON Schema validation
CKAN versions

~2.9, ~2.10, ~2.11

Show details
Download-Url (zip)
Download-Url commit date
2025-09-23
Url to repo
Category
Data Management & Quality


Background Infos

Description (long)
Show details

The resource-docs extension allows attaching a flexible, schema-free data dictionary (resource documentation) to any CKAN resource, not just those backed by the Datastore. Each resource’s documentation can include a validation schema defined individually using JSON Schema Draft 2020-12, enabling optional enforcement of structure and constraints while maintaining flexibility. Documentation format is not limited to Datastore fields - any custom data can be saved. Features include optional automatic inclusion of documentation in resource API responses (configurable via append_docs_to_resource_api), customizable API field name for documentation, optional display in resource view page, and IResourceDocs interface for prepopulating documentation from resource metadata (e.g., using DataStore Data Dictionary). The extension uses jsonschema library for validation and provides comprehensive configuration options.

Version
0.4.4
Version release date
2025-09-23
Contact name
Oleksandr Cherniavskiy
Contakt email
Contact Url
(not set)


Installation Guide

Configuration hints

Requirements: - CKAN 2.10+ - jsonschema>=4.25.0,<5.0.0

Installation: pip install ckanext-resource-docs

Add to ckan.plugins: resource_docs

Configuration:

Include documentation in resource API response (default: false)

WARNING: Can impact performance and response size

ckanext.resource_docs.append_docs_to_resource_api = true

API field name for documentation (default: resource_docs)

WARNING: Ensure schema doesn’t use same field name

ckanext.resource_docs.api_field_name = documentation

Display documentation in resource view page (default: false)

ckanext.resource_docs.show_view = true

IResourceDocs Interface: Implement to prepopulate documentation from resource metadata:

import json import ckan.plugins as p import ckan.logic as tk from ckanext.resource_docs.interfaces import IResourceDocs

class YourPlugin(p.SingletonPlugin): p.implements(IResourceDocs, inherit=True)

def prepopulate_resource_docs(self, resource: dict[str, Any]) -> str:
    """Provide initial documentation using DataStore Data Dictionary."""
    try:
        result = tk.get_action("datastore_info")(
            {"user": tk.current_user.name if tk.current_user else ""},
            {"id": resource["id"]}
        )
    except (tk.ValidationError, tk.ObjectNotFound):
        return ""

    return json.dumps(result["fields"])

Features: - Flexible data dictionary for any resource (not just Datastore) - JSON Schema Draft 2020-12 validation support - Optional automatic API inclusion - Customizable field names - View page display option - Prepopulation interface for automation

Example API response (with append_docs_to_resource_api = true): { “id”: “resource-id-123”, “name”: “my-resource.csv”, “format”: “CSV”, “resource_docs”: { “documentation”: “This dataset contains…”, “fields”: [ { “name”: “column1”, “description”: “Description of column1”, “type”: “string” } ] } }

JSON Schema Validation: - Define validation schema per resource - Uses JSON Schema Draft 2020-12 specification - Optional enforcement of structure/constraints - Flexible while maintaining data quality

Development: git clone https://github.com/DataShades/ckanext-resource-docs.git cd ckanext-resource-docs pip install -e .

Testing: pytest –ckan-ini=test.ini

Plugins to configure (ckan.ini)
resource_docs
CKAN Settings (ckan.ini)
# ckanext.resource_docs.append_docs_to_resource_api = true # ckanext.resource_docs.api_field_name = documentation # ckanext.resource_docs.show_view = true
DB migration to be executed
(not set)
<< back to Extensions