Ejemplos: agregar un campo de metadatos¶
Para concluir la documentación de metadatos, aquí presentaremos algunos ejemplos sobre cómo agregar un campo nuevo al editor de metadatos.
Ejemplo 1: campo mínimo¶
Algunos puntos relacionados con este campo:
No necesitamos ningún comportamiento especial (es decir, lógica para comprobar la coherencia interna, actualizar otros campos según el contenido de este campo, etc.)
El campo se declara como de tipo simple (numérico)
En este caso, donde no necesitamos ninguna lógica específica, podemos confiar en el SparseHandler existente.
El SparseHandler tiene su propio registro de campo manejado, donde las aplicaciones personalizadas pueden agregar el suyo, por lo que para agregar un campo numérico será suficiente agregarlo en el registro, especificando su nombre y el subesquema JSON, por ejemplo:
from geonode.metadata.handlers.sparse import sparse_field_registry
sparse_field_registry.register("accuracy", {"type": "number"})
Este código simple agregará el campo disperso «precisión», escrito como «numérico», en el esquema.
Tenga en cuenta que SparseHandler devolverá al administrador un subesquema posiblemente modificado, y no el registrado.Por ejemplo:
el
"geonode:controlador".Se agregará "sparse"para marcar el controlador del campo.Las anotaciones
títuloydescripciónse pueden agregar o modificar (ver Localización de metadatos).
p.ej.
"accuracy": {
"type": "number",
"geonode:handler": "sparse",
"title": "Positional accuracy"
}
Ejemplo 2: campo json complejo¶
Sin comportamiento especial
El campo puede ser tan complejo como lo permita la especificación del esquema JSON.
Por ejemplo, queremos una lista de personas definidas por 2 campos, uno que contenga el nombre completo y el otro un URI.
"prj1_data_creator": {
"type": "array",
"title": "Resource creator",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"fullname": {
"type": "string",
"maxLength": 255,
"title": "Name surname",
"description": "Insert the full name of the person who created the resource"
},
"orcid": {
"type": "string",
"format": "uri",
"title": "ORCID",
"description": "Insert the ORCID of the person who created the resource"
}
}
},
"geonode:after": "abstract",
"geonode:handler": "sparse"
},
Dado que el tipo es complejo (en este caso es matriz, pero también objeto se maneja de la misma manera), SparseHandler tratará el contenido como un objeto json.Hera una muestra del contenido de la estructura anterior:
"prj1_data_creator": [
{
"fullname": "John Doe",
"orcid": "http://sampleid"
},
],
Ejemplo 3: lista de códigos¶
Puede agregar un campo con un menú desplegable usando tesauros (ver Menús desplegables)
crear un diccionario de sinónimos nuevo con los elementos que necesita (ver Agregar un diccionario de sinónimos);
por ejemplo, cree un diccionario de sinónimos con el identificador
project1_codelist_foobary agréguele algunas palabras clave del diccionario de sinónimos.
cree un campo (ya sea de entrada única o múltiple) y haga referencia al diccionario de sinónimos (ver Codelists)
es:
"prj1_foobar": { "type": "object", "properties": { "id": {"type": "string"}, "label": {"type": "string"} }, "geonode:handler": "sparse", "geonode:thesaurus": "project1_codelist_foobar" },
También puede agregar la etiqueta para el nuevo campo agregando una palabra clave del Tesauro al Tesauro
labels_i18n,
