File: SDMXOrganisationSchemes-methods.R

package info (click to toggle)
r-cran-rsdmx 1%3A0.5-13%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 984 kB
  • sloc: makefile: 2
file content (72 lines) | stat: -rw-r--r-- 2,704 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#' @name SDMXOrganisationSchemes
#' @rdname SDMXOrganisationSchemes
#' @aliases SDMXOrganisationSchemes,SDMXOrganisationSchemes-method
#' 
#' @usage
#' SDMXOrganisationSchemes(xmlObj, namespaces)
#' 
#' @param xmlObj object of class "XMLInternalDocument derived from XML package
#' @param namespaces object of class "data.frame" given the list of namespace URIs
#' @return an object of class "OrganisationSchemes"
#' 
#' @seealso \link{readSDMX}
#'
SDMXOrganisationSchemes <- function(xmlObj, namespaces){
  new("SDMXOrganisationSchemes",
      SDMX(xmlObj, namespaces),
      organisationSchemes = organisationSchemes.SDMXOrganisationSchemes(xmlObj, namespaces)
  )
}

#get list of SDMXOrganisationScheme (SDMXAgencyScheme)
#================================================
organisationSchemes.SDMXOrganisationSchemes <- function(xmlObj, namespaces){
  
  agSchemes <- list()
  
  sdmxVersion <- version.SDMXSchema(xmlObj, namespaces)
  VERSION.21 <- sdmxVersion == "2.1"

  messageNsString <- "message"
  if(isRegistryInterfaceEnvelope(xmlObj, FALSE)) messageNsString <- "registry"
  messageNs <- findNamespace(namespaces, messageNsString)
  strNs <- findNamespace(namespaces, "structure")
  
  #agencyScheme
  if(VERSION.21){
    agXML <- getNodeSet(xmlObj,"//mes:Structures/str:OrganisationSchemes/str:AgencyScheme",
                        namespaces = c(mes = as.character(messageNs), str = as.character(strNs)))
    agSchemes <- lapply(agXML, SDMXAgencyScheme, namespaces)
  }
  
  return(agSchemes)
}

#methods
as.data.frame.SDMXOrganisationSchemes <- function(x, ...){
  
  out <- do.call("rbind.fill",
                 lapply(x@organisationSchemes,
                        function(as){
                          #TODO implement as.data.frame
                          asf <- data.frame(
                            id = slot(as, "id"),
                            agencyID = slot(as, "agencyID"),
                            version = slot(as, "version"),
                            uri = slot(as, "uri"),
                            urn = slot(as, "urn"),
                            isExternalReference = slot(as, "isExternalReference"),
                            isFinal = slot(as, "isFinal"),
                            validFrom = slot(as, "validFrom"),
                            validTo = slot(as, "validTo"),
                            stringsAsFactors = FALSE
                          )
                          return(asf)
                        })
  )
  return(encodeSDMXOutput(out))
  
}

setAs("SDMXOrganisationSchemes", "data.frame",
      function(from) as.data.frame.SDMXOrganisationSchemes(from))