Extensión que amplía esquemas, cosechadores y temas creada para la Fototeca del CNIG
Warning
Requiere mjanez/ckanext-schemingdcat, mjanez/ckanext-dcat, ckan/ckanext-scheming y ckan/ckanext-spatial para funcionar adecuadamente.
Compatibilidad con CKAN:
Versión de CKAN | ¿Compatible? |
---|---|
2.9 | compatible |
2.10 | no comprobado |
Para instalar ckanext-fototeca
:
-
Activar el venv de ckan
. /usr/lib/ckan/default/bin/activate
-
Clona el repositorio y instalalo en el venv de ckan
git clone https://github.com/OpenDataGIS/ckanext-fototeca.git cd ckanext-fototeca pip install -e .
-
Añadir
fototeca
a la configuraciónckan.plugins
en tu archivo de configuración de CKAN. -
Reinicia CKAN
Configura la extensión:
# Add the plugin to the list of plugins
ckan.plugins = ... spatial_metadata ... dcat ... schemingdcat ... fototeca
Warning
Cuando se utiliza la extensión fototeca
, schemingdcat
, scheming
, dcat
y spatial
son necesarias.
El plugin incluye un recolector para bases de datos locales utilizando los esquemas personalizados proporcionados por schemingdcat
y ckanext-scheming
. Este recolector es una subclase del Recolector CKAN proporcionado por ckanext-schemingdcat
y está diseñado para trabajar con el plugin schemingdcat
para proporcionar un recolector más versátil y personalizable para las instancias de CKAN.
Para usarlo, necesitas agregar el plugin fototeca_sql_harvester
a tu archivo de opciones:
ckan.plugins = harvest schemingdcat schemingdcat_datasets ... schemingdcat_ckan_harvester fototeca_sql_harvester
El Recolector SQL soporta las siguientes opciones:
Esta guía te ayudará a generar un esquema que sea compatible con nuestro sistema. El esquema es un objeto JSON que define la asignación de campos en tu base de datos a los campos en nuestro sistema.
El dataset_field_mapping
/distribution_field_mapping
está estructurado de la siguiente manera (versión multilingüe):
{
...
"field_mapping_schema_version": 1,
"<dataset_field_mapping>/<distribution_field_mapping>": {
"<schema_field_name>": {
"languages": {
"<language>": {
<"field_value": "<fixed_value>/<fixed_value_list>">,/<"field_name": "<db_field_name>/<db_field_name_list>">
},
...
},
...
},
...
}
}
<schema_field_name>
: El nombre del campo en el esquema CKAN.<language>
: (Opcional) El código de idioma para campos multilingües. Debe ser un código de idioma válido ISO 639-1. Ahora está anidado bajo la clavelanguages
.
<fixed_value>/<fixed_value_list>
: (Opcional) Un valor fijo o una lista de valores fijos que se asignarán al campo para todos los registros.- Etiquetas de campo: Posición del campo o nombre del campo:
<field_name>/<field_name_list>
: (Opcional) El nombre del campo en tu base de datos. Debe estar en el formato{schema}.{table}.{field}
.
Para campos que no son multilingües, puedes usar directamente field_name
sin la clave languages
. Por ejemplo:
{
...
"field_mapping_schema_version": 2,
"<dataset_field_mapping>/<distribution_field_mapping>": {
"<schema_field_name>": {
<"field_value": "<fixed_value>/<fixed_value_list>">,/<"field_name": "<db_field_name>/<db_field_name_list>">
},
...
}
}
{
"database_type":"postgres",
"credentials":{
"user":"u_fototeca",
"password":"u_fototeca",
"host":"localhost",
"port":5432,
"db":"fototeca"
},
"field_mapping_schema_version":1,
"dataset_field_mapping":{
"alternate_identifier": {
"field_name": "fototeca.vista_ckan.cod_vuelo",
"is_p_key": true,
"index": true,
"f_key_references": [
"fototeca.vuelos.cod_vuelo"
]
},
"flight_color": {
"field_name": "fototeca.vista_ckan.color",
"f_key_references": [
"fototeca.l_color.color"
]
},
},
"encoding": {
"field_value": "UTF-8"
},
"title_translated":{
"languages": {
"es":{
"field_name": "fototeca.vuelos.nom_vuelo",
}
}
}
},
"defaults_groups":[
],
"defaults_tags":[
],
"default_group_dicts":[
]
}
database_type
: El tipo de tu base de datos. Actualmente, solo se soportapostgres
.credentials
: Las credenciales para conectarte a tu base de datos. Debe incluir elusername
,password
,host
,port
, ydatabase name
.field_mapping_schema_version
: La versión del esquema de mapeo de campos. Actualmente, solo se soporta la versión1
.dataset_field_mapping
: La asignación de campos en tu base de datos a los campos en nuestro sistema. Cada campo debe estar en el formato{schema}.{table}.{field}
.- Otras propiedades de
ckanext-harvest
/ckanext-schemingdcat
.
Hay dos tipos de campos que pueden ser definidos en la configuración:
-
Campos regulares: Estos campos tienen una etiqueta de campo para definir el mapeo o un valor fijo para todos sus registros.
- Propiedades: Un campo puede tener una de estas tres propiedades:
- Campos de valor fijo (
field_value
): Estos campos tienen un valor fijo que se asigna a todos los registros. Esto se define usando la propiedadfield_value
. Sifield_value
es una lista,field_name
podría establecerse al mismo tiempo, y elfield_value
extiende la lista obtenida del campo remoto. - Etiquetas de campo: Nombre del campo en la base de datos:
-
Campos basados en nombre (
field_name
): Estos campos se definen por su nombre en la tabla DB. Esto se define usando la propiedadfield_name
. Para facilitar la recuperación de datos de la base de datos, especialmente en lo que respecta a la identificación de claves primarias (p_key
) y claves foráneas (f_key
), se pueden añadir las siguientes propiedades al esquema defield_mapping
:- El campo es clave primaria (
is_p_key
) [Opcional]: Esta propiedad identificará si el campo es una clave primaria (p_key
) o no si no se indica. Esto facilitará las operaciones de join y las referencias entre tablas. - Referencias de tabla (
f_key_references
) [Opcional (lista
)] Para los campos que son claves foráneas, esta propiedad especificaría a qué esquemas, tablas y campos se refiere la clave foránea. Por ejemplo,["public.vuelo.id", "public.camara.id"]
. Esto es útil para automatizar las uniones entre tablas. - Índice (
index
) [Opcional]: Una propiedad booleana para indicar si el campo debería ser indexado para mejorar la eficiencia de las consultas. Aunque no es específico de claves primarias o foráneas, es relevante para la optimización de consultas. Por defecto su valor esfalse
.
El esquema modificado permitiría una recuperación de datos más eficiente y simplificaría la construcción del DataFrame, especialmente en escenarios complejos con múltiples tablas y relaciones. Aquí hay un ejemplo de cómo se vería el esquema modificado para un campo que es una clave foránea:
"dataset_field_mapping": { "alternate_identifier": { "field_name": "fototeca.vista_ckan.cod_vuelo", "is_p_key": true, "index": true, "f_key_references": [ "fototeca.vuelos.cod_vuelo" ] } }
- El campo es clave primaria (
-
- Campos de valor fijo (
- Propiedades: Un campo puede tener una de estas tres propiedades:
-
Campos multilingües (
languages
): Estos campos tienen diferentes valores para diferentes idiomas. Cada idioma se representa como un objeto separado dentro del objeto de campo (es
,en
, ...). El objeto de idioma puede tener propiedadesfield_value
, yfield_name
, al igual que un campo normal.
El esquema se valida utilizando la clase SqlFieldMappingValidator
. Esta clase verifica que el esquema esté en el formato correcto y que todos los campos estén en el formato correcto {schema}.{table}.{field}
. Si el esquema no es válido, se generará un ValueError
.
Para más información sobre la estructura de mapeo de campos, por favor revisa: https://github.com/mjanez/ckanext-schemingdcat?tab=field-mapping-structure
Para instalar ckanext-fototeca
en modo desarrollador ejecuta:
git clone https://github.com/OpenDataGIS/ckanext-fototeca.git
cd ckanext-fototeca
python setup.py develop
Para ejecutar los test:
pytest --ckan-ini=test.ini