Commit 302af606 authored by remy.decoupes's avatar remy.decoupes
Browse files

integrate R dependancies installation in notebook

parent daf822ae
No related merge requests found
Showing with 22 additions and 11 deletions
+22 -11
%% Cell type:markdown id:initial-thousand tags:
# TP : Automatiser la publication de métadonnées sous R
Ce notebook a pour objectif d'illustrer la publication automatisée de métadonnées.
Les gestionnaires de données et d'IDG sont amené à gérer des volumes important de jeux de données. Selon [A. Maulpoix et al 2016](https://halshs.archives-ouvertes.fr/halshs-01302130/), les IDG Régionales possèdent en moyenne 3500 fiches et les nationales, 7000. Même si la majorité proviennent de différents moissonnages, il n'en reste pas moins que le remplissage manuel de fiches restantes reste une tâche très fastidieuses.
Alors des initiatives d'automatisation ont vu le jour dans différents langage de programmation :
+ Java : [Apache SIS](https://sis.apache.org/)
+ Python : [GeoAPI](http://www.geoapi.org/snapshot/python/index.html)
+ R : [Geoflow](https://github.com/eblondel/geoflow)
+ ...
Nous vous proposons ici d'illustrer cette pratique via le langage R et les librairies Geoflow
%% Cell type:markdown id:heavy-series tags:
**1. Chargement des librairies nécessaire au programme**
%% Cell type:code id:5fc7fbb9-5fbb-4d0b-ab40-07dbc282b244 tags:
``` R
install.packages("devtools")
install.packages("XML")
install.packages("uuid")
install.packages("geometa")
install.packages("geonapi")
```
%% Cell type:code id:daily-penalty tags:
``` R
library(geonapi)
library(geometa)
library(uuid)
library(stringr)
```
%% Cell type:markdown id:wrapped-gross tags:
**2. Connexion au geonetwork**
Veuillez paramétrer correctement : l'adresse du serveur GeoNetwork et ses informations de connexion.
Vous pouvez aussi changer le niveau de remontées de log à "Debug"
%% Cell type:code id:billion-delivery tags:
``` R
gn <- GNManager$new(
url = "http://idg-test.interne.teledetection.fr:8181/geonetwork",
version = "",
user = "",
pwd = "",
# logger = "DEBUG"
version = "3.7",
user = "silat",
pwd = "***",
logger = "DEBUG"
)
```
%% Cell type:markdown id:integrated-eating tags:
**3. Lecture des tableurs**
Les 2 tableurs contiennent :
+ Les informations de descriptions des jeux de données
+ Un petit annuaire de contact
%% Cell type:code id:wooden-laundry tags:
``` R
working_dir = getwd()
datasets <- read.csv(file=paste(working_dir, "tableurs_informations_datasets/datasets_description.csv", sep = "/"))
contacts <- read.csv(file=paste(working_dir, "tableurs_informations_datasets/contacts.csv", sep = "/"))
```
%% Cell type:markdown id:negative-producer tags:
**4. Parcourir les lignes du fichier de descriptions des jeux de données et créer la fiche de métadonnées correspondantes**
%% Cell type:code id:bound-throw tags:
``` R
# Parcourir les jeux de données (datasets) et créer les MD
for (dataset in datasets$n) {
print(paste0("Working on: ", datasets$titre[dataset]))
metadata_id <- datasets$uuid[dataset]
##Création métadonnée
md = ISOMetadata$new()
metadata_id=paste(metadata_id)
md$setFileIdentifier(metadata_id)
md$setCharacterSet("utf8")
md$setMetadataStandardName("ISO 19115:2003/19139")
md$setLanguage("fra")
md$setDateStamp(Sys.time())
md$setHierarchyLevel(datasets$hierarchyLevel[dataset])
##Creation identification
ident <- ISODataIdentification$new()
ident$setAbstract(paste(datasets$abstract[dataset]))
ident$setLanguage("fra")
for (topic in unlist(strsplit(paste(datasets$topic[dataset]), ", "))){
ident$addTopicCategory(topic)
}
## keywords
### General Keywords
dynamic_keywords <- ISOKeywords$new()
for (kw in unlist(strsplit(paste(datasets$keywords[dataset]), ", "))){
dynamic_keywords$addKeyword(kw)
}
ident$addKeywords(dynamic_keywords)
##Contacts PI
for (pi in unlist(strsplit(paste(datasets$PI[dataset]), ", "))){
rp <- ISOResponsibleParty$new()
ct <- contacts$name==pi
contact=contacts[ct,]
labo <- strsplit(as.character(contact$organisation), "/")[[1]][1]
rp$setOrganisationName(labo)
rp$setIndividualName(paste(as.character(contact$name),as.character(contact$firstname),sep=" "))
rp$setRole("principalInvestigator")
isocontact <- ISOContact$new()
address <- ISOAddress$new()
address$setEmail(as.character(contact$mail))
isocontact$setAddress(address)
rp$setContactInfo(isocontact)
ident$addPointOfContact(rp) # Ajout contact pour la ressource : le PI
}
#add link to data access
distrib <- ISODistribution$new()
dto <- ISODigitalTransferOptions$new()
for (link in unlist(strsplit(paste(datasets$web.access[dataset]), ", "))){
# Remove paranthesis
tuple <- gsub('\\(',"",link)
tuple <- gsub('\\)',"",tuple)
newURL <- ISOOnlineResource$new()
newURL$setName(paste0(strsplit(paste(tuple), " @ ")[[1]][1]," :"))
newURL$setLinkage(strsplit(paste(tuple), " @ ")[[1]][2])
newURL$setProtocol("WWW:LINK-1.0-http--link")
dto$addOnlineResource(newURL)
}
distrib$setDigitalTransferOptions(dto)
md$setDistributionInfo(distrib)
#adding legal constraint(s)
if(nchar(as.character(datasets$licence[dataset])) !=0) {
lc <- ISOLegalConstraints$new()
lc$addUseLimitation(datasets$licence[dataset])
ident$setResourceConstraints(lc)
}
# Titre et identification
ct <- ISOCitation$new()
ct$setTitle(paste(datasets$titre[dataset]))
isoid=ISOMetaIdentifier$new(code = datasets$uuid[dataset])
ct$addIdentifier(isoid)
ident$setCitation(ct)
## Aperçu / thumbnail
for(thumbnail in unlist(strsplit(paste(datasets$thumbnail[dataset]), ", "))){
go <- ISOBrowseGraphic$new(
fileName = thumbnail,
fileDescription = "thumbnail",
fileType = "image/png"
)
ident$addGraphicOverview(go)
}
md$addIdentificationInfo(ident)
# Conversion en iso19139 et sauvegarde du fichier XML
md$encode(inspire = FALSE)
nom_fichier = str_replace_all(datasets$titre[dataset], " ", "_") # nous enlevons les espaces
nom_fichier = str_replace_all(nom_fichier, "/", "_") # nous enlevons les slashs
nom_fichier = paste(nom_fichier, "xml", sep=".") # nous ajoutons l'extension de fichier XML
chemin_fichier = paste("xml_generated", nom_fichier, sep="/") # nous cronstruisons le chemin vers le fichier
md$save(chemin_fichier)
}
```
%% Cell type:markdown id:nuclear-switzerland tags:
**5. Upload ou mise à jour des fiches de métadonnées**
%% Cell type:code id:possible-pickup tags:
``` R
require(XML)
filenames = list.files("xml_generated", pattern="*.xml")
for (file in filenames) {# nous parcourons l'ensemble des fichiers xml
chemin_fichier = paste("xml_generated", file, sep="/")
xml = xmlParse(chemin_fichier)
md = ISOMetadata$new(xml = xml) # création de l'objet ISOMetadata
created = gn$insertMetadata( # insertion dans GeoNetwork
xml = md$encode(),
group = "1",
)
}
```
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment