R/ISOMetadataSchemas.R

Defines functions getMetadataStandard setMetadataStandard getISOMetadataSchemas setISOMetadataSchemas getISOMetadataSchemaFile registerISOMetadataSchema

Documented in getISOMetadataSchemaFile getISOMetadataSchemas getMetadataStandard registerISOMetadataSchema setISOMetadataSchemas setMetadataStandard

#' @name registerISOMetadataSchema
#' @aliases registerISOMetadataSchema
#' @title registerISOMetadataSchema
#' @export
#' @description \code{registerISOMetadataSchema} allows to register a new schema
#' in \pkg{geometa}
#' 
#' @usage registerISOMetadataSchema(xsdFile)
#' 
#' @param xsdFile the schema XSD file
#' 
#' @examples             
#'   registerISOMetadataSchema(xsdFile = "http://www.isotc211.org/2005/gmd/gmd.xsd")
#' 
#' @author Emmanuel Blondel, \email{emmanuel.blondel1@@gmail.com}
#
registerISOMetadataSchema <- function(xsdFile){
  schemas <- tryCatch(
    XML::xmlParse(
      xsdFile, isSchema = TRUE, xinclude = TRUE,
      error = function (msg, code, domain, line, col, level, filename, class = "XMLError"){}
    )
  )
  .geometa.iso$schemas <- schemas
}

#'getISOMetadataSchemaFile
#'@export
getISOMetadataSchemaFile <- function(version = "19115-1/2"){
  available_versions <- c("19115-1/2","19115-3")
  if(!version %in% available_versions){
    errMsg <- sprintf("Version '%s' not among available schema versions (%s)",
                      version, paste0(available_versions, collapse = ","))
    stop(errMsg)
  }
  schemaPath <- "extdata/schemas"
  namespace <- switch(version,
                      "19115-1/2" = "19115/-1/gmd",
                      "19115-3" = "19115/-3/mdb/2.0" 
  )
  xsdFilename <- switch(version,
                        "19115-1/2" = "gmd.xsd",
                        "19115-3" = "mdb.xsd"
  )
  defaultXsdFile <- system.file(paste(schemaPath, namespace, sep="/"), xsdFilename, package = "geometa", mustWork = TRUE)
  return(defaultXsdFile)
}

#'setISOMetadataSchemas
#'@export
setISOMetadataSchemas <- function(version = "19115-1/2"){
  packageStartupMessage("Loading ISO 19139 XML schemas...")
  registerISOMetadataSchema(getISOMetadataSchemaFile(version = version))
}

#' @name getISOMetadataSchemas
#' @aliases getISOMetadataSchemas
#' @title getISOMetadataSchemas
#' @export
#' @description \code{getISOMetadataSchemas} gets the schemas registered in \pkg{geometa}
#' 
#' @usage getISOMetadataSchemas()
#' 
#' @examples             
#'   getISOMetadataSchemas()
#' 
#' @author Emmanuel Blondel, \email{emmanuel.blondel1@@gmail.com}
#
getISOMetadataSchemas <- function(){
  return(.geometa.iso$schemas)
}


#' @name setMetadataStandard
#' @aliases setMetadataStandard
#' @title setMetadataStandard
#' @export
#' @description \code{setMetadataStandard} allows to set the standard to use for encoding/decoding in \pkg{geometa}.
#'  By default the standard "19115-1/2" will be used. Possible alternative value "19115-3"
#' 
#' @usage setMetadataStandard(version)
#' 
#' @param version the standard version
#' 
#' @examples             
#'   setMetadataStandard(version = "19115-3")
#' 
#' @author Emmanuel Blondel, \email{emmanuel.blondel1@@gmail.com}
#
setMetadataStandard <- function(version = "19115-1/2"){
  available_versions <- c("19115-1/2","19115-3")
  if(!version %in% available_versions){
    errMsg <- sprintf("Version '%s' not among available schema versions (%s)",
                      version, paste0(available_versions, collapse = ","))
    stop(errMsg)
  }
  .geometa.iso$version <- version
  setISOMetadataNamespaces(version = version)
}

#' @name getMetadataStandard
#' @aliases getMetadataStandard
#' @title getMetadataStandard
#' @export
#' @description \code{getMetadataStandard} allows to set the standard to use for encoding/decoding in \pkg{geometa}.
#' 
#' @usage getMetadataStandard()
#' 
#' @examples             
#'   getMetadataStandard()
#' 
#' @author Emmanuel Blondel, \email{emmanuel.blondel1@@gmail.com}
#
getMetadataStandard <- function(){
  return(.geometa.iso$version)
}
eblondel/geometa documentation built on Sept. 16, 2024, 9:34 a.m.