From 133d808e77fc702c71243100c9ddd227110f0b93 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 6 Oct 2025 15:00:53 +0100 Subject: [PATCH 01/82] Drop development portion from version number and update description --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f6bedf2..de266b5 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: rocrateR Title: RO-Crate R Package Wrapper -Version: 0.0.1.9000 +Version: 0.0.1 Authors@R: c( person(given = "Roberto", family = "Villegas-Diaz", @@ -9,7 +9,7 @@ Authors@R: c( comment = c(ORCID = "0000-0001-5036-8661")), person("Research Object community", role = c("cph"))) Description: R package for creating, manipulating and reading RO-Crates. Latest - supported version 1.2 of the specification. + supported version of the specification: https://w3id.org/ro/crate/1.2. License: MIT + file LICENSE Suggests: testthat (>= 3.0.0) From 65f957ef15a46af2357ba55cba55e6f55e54e482 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 6 Oct 2025 15:04:50 +0100 Subject: [PATCH 02/82] Delete lifecycle badge, update URLs to point to ResearchObject repo, add instructions to install released version and new section to validate RO-Crate with external tool --- README.Rmd | 65 +++++++++++++++++++++++++++++++++++----- README.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 133 insertions(+), 20 deletions(-) diff --git a/README.Rmd b/README.Rmd index fa55913..aea55f2 100644 --- a/README.Rmd +++ b/README.Rmd @@ -16,21 +16,26 @@ knitr::opts_chunk$set( # rocrateR: RO-Crate R Package Wrapper -[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) [![CRAN status](https://www.r-pkg.org/badges/version/rocrateR)](https://CRAN.R-project.org/package=rocrateR) -[![R-CMD-check](https://github.com/villegar/ro-crate-r/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/villegar/ro-crate-r/actions/workflows/R-CMD-check.yaml) -[![Codecov test coverage](https://codecov.io/gh/villegar/ro-crate-r/graph/badge.svg)](https://app.codecov.io/gh/villegar/ro-crate-r) +[![R-CMD-check](https://github.com/ResearchObject/ro-crate-r/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/ResearchObject/ro-crate-r/actions/workflows/R-CMD-check.yaml) +[![Codecov test coverage](https://codecov.io/gh/ResearchObject/ro-crate-r/graph/badge.svg)](https://app.codecov.io/gh/ResearchObject/ro-crate-r) -The goal of rocrateR is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version 1.2 of the specification. +The goal of `{rocrateR}` is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2. ## 0. Installation -You can install the development version of rocrateR like so: +You can install the released version of `{rocrateR}` from [CRAN](https://cran.r-project.org/package=rocrateR) with: + +``` r +install.packages("rocrateR") +``` + +And the development version from [GitHub](https://github.com/ResearchObject/ro-crate-r/) with: ``` r # install.packages("pak") -pak::pkg_install("ResearchObject/ro-crate-r@main") +pak::pkg_install("ResearchObject/ro-crate-r@dev") ``` ## 1. First RO-Crate @@ -69,7 +74,7 @@ readLines(tmp) unlink(tmp) ``` -## 2. Adding additional entities +## 2. Including additional entities In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include additional entities in your RO-Crate. Entities must contain at least two components `@id` and `@type` (see [https://w3id.org/ro/crate/1.2](https://w3id.org/ro/crate/1.2) for details). @@ -117,3 +122,49 @@ my_second_ro_crate <- rocrateR::rocrate(person_rvd, organisation_uol) |> ```{r} print(my_second_ro_crate) ``` + +## 3. Validation (experimental) + +As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at https://www.researchobject.org/ro-crate/tools), here we will explore the Python package [`rocrate-validator`](https://github.com/crs4/rocrate-validator). For installation details, please visit https://github.com/crs4/rocrate-validator. + +Note that we will rely on [`{reticulate}`](https://cran.r-project.org/package=reticulate) to install and execute the validator within R: + +### 3.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +``` r +pak::pkg_install("reticulate") +``` + +### 3.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) + +``` r +reticulate::py_install("roc-validator", env = "rocrateR") +``` + +### 3.3. Create example RO-Crate and validate it + +```{r} +basic_ro_crate <- rocrateR::rocrate() + +# store crate inside temporal directory +tmp <- file.path(tempdir(), "ro-crate-metadata.json") +basic_ro_crate |> + rocrateR::write_rocrate(tmp) +# wrap crate into zip file (expected by validator) +tmp_zip <- paste(tmp, ".zip") +zip(tmp_zip, tmp) + +# validate (note the name of the module: rocrate_validator) +reticulate::use_virtualenv("rocrateR") +rocrate_validator <- reticulate::import("rocrate_validator") +status <- rocrate_validator$utils$validate_rocrate_uri(tmp_zip) + +if (status) { + message("RO-Crate is valid!") +} else { + message("RO-Crate is invalid!") +} + +# delete temporal files +unlink(tmp) +unlink(tmp_zip) +``` \ No newline at end of file diff --git a/README.md b/README.md index 69aa3d1..e26aed4 100644 --- a/README.md +++ b/README.md @@ -5,26 +5,32 @@ -[![Lifecycle: -experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) [![CRAN status](https://www.r-pkg.org/badges/version/rocrateR)](https://CRAN.R-project.org/package=rocrateR) -[![R-CMD-check](https://github.com/villegar/ro-crate-r/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/villegar/ro-crate-r/actions/workflows/R-CMD-check.yaml) +[![R-CMD-check](https://github.com/ResearchObject/ro-crate-r/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/ResearchObject/ro-crate-r/actions/workflows/R-CMD-check.yaml) [![Codecov test -coverage](https://codecov.io/gh/villegar/ro-crate-r/graph/badge.svg)](https://app.codecov.io/gh/villegar/ro-crate-r) +coverage](https://codecov.io/gh/ResearchObject/ro-crate-r/graph/badge.svg)](https://app.codecov.io/gh/ResearchObject/ro-crate-r) -The goal of rocrateR is to provide an R package for creating, -manipulating and reading RO-Crates. Latest supported version 1.2 of the -specification. +The goal of `{rocrateR}` is to provide an R package for creating, +manipulating and reading RO-Crates. Latest supported version of the +specification: . ## 0. Installation -You can install the development version of rocrateR like so: +You can install the released version of `{rocrateR}` from +[CRAN](https://cran.r-project.org/package=rocrateR) with: + +``` r +install.packages("rocrateR") +``` + +And the development version from +[GitHub](https://github.com/ResearchObject/ro-crate-r/) with: ``` r # install.packages("pak") -pak::pkg_install("ResearchObject/ro-crate-r@main") +pak::pkg_install("ResearchObject/ro-crate-r@dev") ``` ## 1. First RO-Crate @@ -61,7 +67,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-09-20", +#> "datePublished": "2025-10-06", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -104,7 +110,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-09-20\"," +#> [19] " \"datePublished\": \"2025-10-06\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -116,7 +122,7 @@ readLines(tmp) unlink(tmp) ``` -## 2. Adding additional entities +## 2. Including additional entities In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include @@ -186,7 +192,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-09-20", +#> "datePublished": "2025-10-06", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -211,3 +217,59 @@ print(my_second_ro_crate) #> ] #> } ``` + +## 3. Validation (experimental) + +As you develop your RO-Crates, you might want to validate them. There +are few validators online (some of which can be found at +), here we will explore +the Python package +[`rocrate-validator`](https://github.com/crs4/rocrate-validator). For +installation details, please visit +. + +Note that we will rely on +[`{reticulate}`](https://cran.r-project.org/package=reticulate) to +install and execute the validator within R: + +### 3.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) + +``` r +pak::pkg_install("reticulate") +``` + +### 3.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) + +``` r +reticulate::py_install("roc-validator", env = "rocrateR") +``` + +### 3.3. Create example RO-Crate and validate it + +``` r +basic_ro_crate <- rocrateR::rocrate() + +# store crate inside temporal directory +tmp <- file.path(tempdir(), "ro-crate-metadata.json") +basic_ro_crate |> + rocrateR::write_rocrate(tmp) +# wrap crate into zip file (expected by validator) +tmp_zip <- paste(tmp, ".zip") +zip(tmp_zip, tmp) + +# validate (note the name of the module: rocrate_validator) +reticulate::use_virtualenv("rocrateR") +rocrate_validator <- reticulate::import("rocrate_validator") +status <- rocrate_validator$utils$validate_rocrate_uri(tmp_zip) + +if (status) { + message("RO-Crate is valid!") +} else { + message("RO-Crate is invalid!") +} +#> RO-Crate is valid! + +# delete temporal files +unlink(tmp) +unlink(tmp_zip) +``` From cde04c83f2e0882eca11d16840a226ee1331a17a Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 13 Oct 2025 13:21:43 +0100 Subject: [PATCH 03/82] Update the function rocrate_5s to include CreativeWork under @type, as per specified in the documentation https://www.researchobject.org/ro-crate/specification/1.2/profiles.html --- R/rocrate.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/rocrate.R b/R/rocrate.R index 57d070d..6b9c51e 100644 --- a/R/rocrate.R +++ b/R/rocrate.R @@ -111,7 +111,7 @@ rocrate_5s <- function(..., v5scrate_id <- paste0("https://w3id.org/5s-crate/", v5scrate) prof_5scrate <- list( `@id` = v5scrate_id, - `@type` = "Profile", + `@type` = c("CreativeWork", "Profile"), name = "Five Safes RO-Crate profile" ) From 3830e1aea4521537d4d92ed8b16e7a70fb4b8611 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 13 Oct 2025 13:23:19 +0100 Subject: [PATCH 04/82] Update validation of RO-Crates, is_rocrate, to account for entities with multiple entries in the @type field, for example profiles --- R/utils-rocrate.R | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/R/utils-rocrate.R b/R/utils-rocrate.R index 6fd6f97..87b8a74 100644 --- a/R/utils-rocrate.R +++ b/R/utils-rocrate.R @@ -37,13 +37,12 @@ is_rocrate <- function(rocrate) { sapply(`[[`, "@id") |> unlist() - # extract @graph elements' @type - graph_types <- ro_crate_graph |> - sapply(`[[`, "@type") |> - unlist() + # validate @graph entities + valid_entities <- ro_crate_graph |> + sapply(.validate_entity.list, ent_name = graph_ids) - # check lengths of @ids and @types, must be the same - valid_length_graph <- length(graph_ids) == length(graph_types) + # check lengths of @ids and number of entities, must be the same + valid_length_graph <- length(graph_ids) == length(valid_entities) # has an RO-Crate Metadata descriptor entity has_rocrate_meta <- "ro-crate-metadata.json" %in% graph_ids @@ -76,4 +75,3 @@ is_rocrate <- function(rocrate) { # return (invisibly) the input RO-Crate return(invisible(rocrate)) } - From 8b9251df3652e411f96966df9592476c281550f5 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 13 Oct 2025 13:24:01 +0100 Subject: [PATCH 05/82] Update documentation to capture S3 generic methods for .validate_entity in a single documentation file --- R/utils-entity.R | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/R/utils-entity.R b/R/utils-entity.R index 0e4d78d..db2a4ec 100644 --- a/R/utils-entity.R +++ b/R/utils-entity.R @@ -55,11 +55,14 @@ #' (default: `c("@id", "@type")`) #' #' @returns Boolean value to indicate if the given entity is valid. +#' @rdname dot-validate_entity #' @keywords internal .validate_entity <- function(x, ..., ent_name = NULL, required = c("@id", "@type")) { UseMethod(".validate_entity", x) } +#' @rdname dot-validate_entity +#' @method validate_entity character #' @keywords internal .validate_entity.character <- function(x, ..., ent_name = NULL, required = "type") { has_elements <- sapply(required, \(x) !is.null(getElement(list(...), x))) @@ -67,6 +70,8 @@ .validate_entity_overview(required, ent_name) } +#' @rdname dot-validate_entity +#' @method validate_entity list #' @keywords internal .validate_entity.list <- function(x, ..., ent_name = NULL, required = c("@id", "@type")) { has_elements <- required %in% names(x) @@ -74,6 +79,8 @@ .validate_entity_overview(required, ent_name) } +#' @rdname dot-validate_entity +#' @method validate_entity numeric #' @keywords internal .validate_entity.numeric <- function(x, ..., ent_name = NULL, required = "type") { has_elements <- sapply(required, \(x) !is.null(getElement(list(...), x))) From 0a851af679c5d6796708c274ea4408eadb22adb1 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 13 Oct 2025 13:24:40 +0100 Subject: [PATCH 06/82] New render --- man/dot-validate_entity.Rd | 9 +++++++++ man/rocrateR-package.Rd | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/man/dot-validate_entity.Rd b/man/dot-validate_entity.Rd index 7ff9e07..4b56714 100644 --- a/man/dot-validate_entity.Rd +++ b/man/dot-validate_entity.Rd @@ -2,9 +2,18 @@ % Please edit documentation in R/utils-entity.R \name{.validate_entity} \alias{.validate_entity} +\alias{.validate_entity.character} +\alias{.validate_entity.list} +\alias{.validate_entity.numeric} \title{Validate entity} \usage{ .validate_entity(x, ..., ent_name = NULL, required = c("@id", "@type")) + +\method{validate_entity}{character}(x, ..., ent_name = NULL, required = "type") + +\method{validate_entity}{list}(x, ..., ent_name = NULL, required = c("@id", "@type")) + +\method{validate_entity}{numeric}(x, ..., ent_name = NULL, required = "type") } \arguments{ \item{x}{New entity. If a single value (e.g., \code{character}, \code{numeric}) is diff --git a/man/rocrateR-package.Rd b/man/rocrateR-package.Rd index 3f122fa..7439209 100644 --- a/man/rocrateR-package.Rd +++ b/man/rocrateR-package.Rd @@ -6,7 +6,7 @@ \alias{rocrateR-package} \title{rocrateR: RO-Crate R Package Wrapper} \description{ -R package for creating, manipulating and reading RO-Crates. Latest supported version 1.2 of the specification. +R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2. } \author{ \strong{Maintainer}: Roberto Villegas-Diaz \email{r.villegas-diaz@outlook.com} (\href{https://orcid.org/0000-0001-5036-8661}{ORCID}) From 20f0d3db86e760c06fd74a98430c5d053f4fcb66 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 11:27:44 +0100 Subject: [PATCH 07/82] Add new module to create an RO-Crate bag using the BagIt file packaging format --- R/utils-bag.R | 142 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 R/utils-bag.R diff --git a/R/utils-bag.R b/R/utils-bag.R new file mode 100644 index 0000000..412a66d --- /dev/null +++ b/R/utils-bag.R @@ -0,0 +1,142 @@ +#' Bag the contents of an RO-Crate +#' +#' Bag the contents of an RO-Crate using the BagIt file packaging format v1.0. +#' For more details see the definition: +#' \url{https://datatracker.ietf.org/doc/html/rfc8493} +#' +#' @param x A string to a path containing at the very minimum an RO-Crate +#' metadata descriptor file, `ro-crate-metadata.json`. Alternatively, an +#' object with the \link[rocrateR]{rocrate} class. +#' @param ... Additional parameters, see below. +#' +#' @export +#' +# @examples +bag_rocrate <- function(x, ...) { + UseMethod("bag_rocrate", x) +} + +#' @rdname bag_rocrate +#' +#' @param force_bag Boolean flag to indicate whether the force the creation of +#' a 'bag' even if not all the files were successfully bagged +#' (default: `FALSE` ~ check if all the files were copied successfully). +#' +#' @export +bag_rocrate.character <- function(x, ..., force_bag = FALSE) { + # check a valid path was given + if (!dir.exists(x)) { + stop("The given path, `x`, does not exist!\n", + "Create with:\n\t`mkdir ", x, "`") + } + + # list all the files inside the given path + rocrate_files <- list.files(x, recursive = TRUE) + + # create an RO-Crate ID + rocrate_id <- paste0("rocrate-", digest::digest(Sys.time())) + + # create temporary directory, including `rocrate_id` + tmp_dir <- file.path(tempdir(), rocrate_id, "data") + + # create sub-directories + dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) + on.exit(unlink(tmp_dir, recursive = TRUE, force = TRUE)) + + # copy files inside the temporary directory + rocrate_files_status <- rocrate_files |> + sapply(function(f) { + # ensure the target sub-directory exists + dir.create(dirname(file.path(tmp_dir, f)), + showWarnings = FALSE, recursive = TRUE) + # create copy of file + file.copy(file.path(x, f), file.path(tmp_dir, f), overwrite = TRUE) + }) + + # check that all the files were copied, unless force_bag = TRUE + if (force_bag || !all(rocrate_files_status)) { + stop("It was not possible to bag all your files!\nMissing file(s):\n", + paste0(" - ", rocrate_files[rocrate_files_status], collapse = "\n"), + "\n\nTo ignore this check, set `force_bag = TRUE`.") + } + + # create bag declaration + bagit_declaration(tmp_dir) + + # create bag manifest and stored one level above `tmp_dir` + bagit_manifest(tmp_dir, rocrate_files) + + # create BagIt fetch file + bagit_fetch(tmp_dir) + + # compress bag contents inside original path + output_bag <- file.path(x, paste0(rocrate_id, ".zip")) + bag_files <- list.files(file.path(tmp_dir, ".."), + full.names = TRUE, + recursive = TRUE) + utils::zip(output_bag, bag_files) + + message("RO-Crate successfully 'bagged'!\nFor details, see: ", output_bag) + unlink(tmp_dir, recursive = TRUE, force = TRUE) +} + +#' @rdname bag_rocrate +#' +#' @param path String with path to the root of the RO-Crate (default: `NULL`). +#' @param overwrite Boolean flag to indicate if the RO-Crate metadata descriptor +#' file should be overwritten if already inside `path` (default: `FALSE`). +#' +#' @export +bag_rocrate.rocrate <- function(x, ..., path = NULL, overwrite = FALSE, force_bag = FALSE) { + # check the `x` object + is_rocrate(x) + # check a valid path was given + if (!dir.exists(path)) { + stop("The given `path` does not exist!\nCreate with:\n\t`mkdir ", path, "`") + } + # check if the given path contains an RO-Crate metadata descriptor file + if (file.exists(file.path(path, "ro-crate-metadata.json"))){ + if (overwrite) { + warning("Overwritting the RO-Crate metadata descriptor file!") + } else { + stop("The given `path` already contains an RO-Crate metadata descriptor ", + "file, `ro-crate-metadata.json`. To ignore this check, set ", + "`overwrite = TRUE` when calling this function!") + } + } + # write the RO-Crate metadata descriptor file + write_rocrate(x, file.path(path, "ro-crate-metadata.json")) + + # call the bag method for the given `path` + bag_rocrate(path) +} + +#' @keywords internal +bagit_declaration <- function(path) { + declaration_lines <- c("BagIt-version: 1.0", + "Tag-File-Character-Encoding: UTF-8") + writeLines(declaration_lines, + con = file.path(path, "../bagit.txt")) +} + +#' @keywords internal +bagit_fetch <- function(path, rocrate = NULL) { + # to-do + # 1. read rocrate and find any file entities that have an external URL + # 2. list results from step 1 in a file called fetch.txt + # See: https://www.researchobject.org/ro-crate/specification/1.1/appendix/implementation-notes.html + # Also: https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.3 +} + +#' @keywords internal +bagit_manifest <- function(path, files, algo = "sha512") { + manifest_lines <- sapply(files, function(f) { + # generate checksum + checksum <- digest::digest(file.path(path, f), algo = algo, file = TRUE) + # combine checksum with file path & name + paste0(checksum, " data/", f) + }) + writeLines(manifest_lines, + con = file.path(path, "..", paste0("manifest-", algo, ".txt"))) + return(invisible(manifest_lines)) +} From f2ae872bff92666deedd0d5ab576702acb8f859f Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 11:28:21 +0100 Subject: [PATCH 08/82] Remove documentation for internal S3 generic methods, as this resulted in a documentation NOTE --- R/utils-entity.R | 4 ---- 1 file changed, 4 deletions(-) diff --git a/R/utils-entity.R b/R/utils-entity.R index db2a4ec..58fef6c 100644 --- a/R/utils-entity.R +++ b/R/utils-entity.R @@ -55,13 +55,11 @@ #' (default: `c("@id", "@type")`) #' #' @returns Boolean value to indicate if the given entity is valid. -#' @rdname dot-validate_entity #' @keywords internal .validate_entity <- function(x, ..., ent_name = NULL, required = c("@id", "@type")) { UseMethod(".validate_entity", x) } -#' @rdname dot-validate_entity #' @method validate_entity character #' @keywords internal .validate_entity.character <- function(x, ..., ent_name = NULL, required = "type") { @@ -70,7 +68,6 @@ .validate_entity_overview(required, ent_name) } -#' @rdname dot-validate_entity #' @method validate_entity list #' @keywords internal .validate_entity.list <- function(x, ..., ent_name = NULL, required = c("@id", "@type")) { @@ -79,7 +76,6 @@ .validate_entity_overview(required, ent_name) } -#' @rdname dot-validate_entity #' @method validate_entity numeric #' @keywords internal .validate_entity.numeric <- function(x, ..., ent_name = NULL, required = "type") { From 7638110e9ca52dccb4b3d54c766425fefb804648 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 11:29:33 +0100 Subject: [PATCH 09/82] New build --- NAMESPACE | 3 +++ man/bag_rocrate.Rd | 35 +++++++++++++++++++++++++++++++++++ man/dot-validate_entity.Rd | 9 --------- 3 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 man/bag_rocrate.Rd diff --git a/NAMESPACE b/NAMESPACE index 2a23d48..4655c3d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,9 +1,12 @@ # Generated by roxygen2: do not edit by hand +S3method(bag_rocrate,character) +S3method(bag_rocrate,rocrate) S3method(entity,default) S3method(print,rocrate) export(add_entity) export(add_entity_value) +export(bag_rocrate) export(entity) export(is_rocrate) export(read_rocrate) diff --git a/man/bag_rocrate.Rd b/man/bag_rocrate.Rd new file mode 100644 index 0000000..8fd19cc --- /dev/null +++ b/man/bag_rocrate.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-bag.R +\name{bag_rocrate} +\alias{bag_rocrate} +\alias{bag_rocrate.character} +\alias{bag_rocrate.rocrate} +\title{Bag the contents of an RO-Crate} +\usage{ +bag_rocrate(x, ...) + +\method{bag_rocrate}{character}(x, ..., force_bag = FALSE) + +\method{bag_rocrate}{rocrate}(x, ..., path = NULL, overwrite = FALSE, force_bag = FALSE) +} +\arguments{ +\item{x}{A string to a path containing at the very minimum an RO-Crate +metadata descriptor file, \code{ro-crate-metadata.json}. Alternatively, an +object with the \link[rocrateR]{rocrate} class.} + +\item{...}{Additional parameters, see below.} + +\item{force_bag}{Boolean flag to indicate whether the force the creation of +a 'bag' even if not all the files were successfully bagged +(default: \code{FALSE} ~ check if all the files were copied successfully).} + +\item{path}{String with path to the root of the RO-Crate (default: \code{NULL}).} + +\item{overwrite}{Boolean flag to indicate if the RO-Crate metadata descriptor +file should be overwritten if already inside \code{path} (default: \code{FALSE}).} +} +\description{ +Bag the contents of an RO-Crate using the BagIt file packaging format v1.0. +For more details see the definition: +\url{https://datatracker.ietf.org/doc/html/rfc8493} +} diff --git a/man/dot-validate_entity.Rd b/man/dot-validate_entity.Rd index 4b56714..7ff9e07 100644 --- a/man/dot-validate_entity.Rd +++ b/man/dot-validate_entity.Rd @@ -2,18 +2,9 @@ % Please edit documentation in R/utils-entity.R \name{.validate_entity} \alias{.validate_entity} -\alias{.validate_entity.character} -\alias{.validate_entity.list} -\alias{.validate_entity.numeric} \title{Validate entity} \usage{ .validate_entity(x, ..., ent_name = NULL, required = c("@id", "@type")) - -\method{validate_entity}{character}(x, ..., ent_name = NULL, required = "type") - -\method{validate_entity}{list}(x, ..., ent_name = NULL, required = c("@id", "@type")) - -\method{validate_entity}{numeric}(x, ..., ent_name = NULL, required = "type") } \arguments{ \item{x}{New entity. If a single value (e.g., \code{character}, \code{numeric}) is From a672622580466e214a7860e68feaa67d57a83711 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 11:29:50 +0100 Subject: [PATCH 10/82] Add dependency for the digest package --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index de266b5..60b96d1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -17,7 +17,8 @@ Config/testthat/edition: 3 Encoding: UTF-8 Language: en-GB Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.2 +RoxygenNote: 7.3.3 Imports: + digest, jsonlite, tibble From 5037828f1e2e4c417a40f341195017c2984abd02 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 11:32:14 +0100 Subject: [PATCH 11/82] Update README --- README.Rmd | 2 +- README.md | 8 ++++---- inst/images/logo.png | Bin 0 -> 124486 bytes 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 inst/images/logo.png diff --git a/README.Rmd b/README.Rmd index aea55f2..cbf4752 100644 --- a/README.Rmd +++ b/README.Rmd @@ -13,7 +13,7 @@ knitr::opts_chunk$set( ) ``` -# rocrateR: RO-Crate R Package Wrapper +# rocrateR: RO-Crate R Package Wrapper logo [![CRAN status](https://www.r-pkg.org/badges/version/rocrateR)](https://CRAN.R-project.org/package=rocrateR) diff --git a/README.md b/README.md index e26aed4..f5d78eb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# rocrateR: RO-Crate R Package Wrapper +# rocrateR: RO-Crate R Package Wrapper logo @@ -67,7 +67,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-06", +#> "datePublished": "2025-10-16", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -110,7 +110,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-06\"," +#> [19] " \"datePublished\": \"2025-10-16\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -192,7 +192,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-06", +#> "datePublished": "2025-10-16", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, diff --git a/inst/images/logo.png b/inst/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1c443fe3512e53ea19e52973c0194d82158900ed GIT binary patch literal 124486 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

F}@>!a3PQC(EqtTRIxdd+WO-3HL;in&+;0qW!{ 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 SxLh~#uIeh9%7u!SVgCc`di{z3 literal 0 HcmV?d00001 From 02c4fda8554f95cb55400c49b492b29ee8235b1a Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 13:55:55 +0100 Subject: [PATCH 12/82] Add zip_flags as a new param, replace the use of tempdir() to bag the RO-Crate and update path for the bagit declaration and manifest --- R/utils-bag.R | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index 412a66d..a0deabd 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -21,9 +21,12 @@ bag_rocrate <- function(x, ...) { #' @param force_bag Boolean flag to indicate whether the force the creation of #' a 'bag' even if not all the files were successfully bagged #' (default: `FALSE` ~ check if all the files were copied successfully). +#' @param zip_flags String of characters with the flags to be used when +#' archiving/compressing the RO-Crate bag (default: `-r9X`, see +#' `zip -h` in the terminal for more details). #' #' @export -bag_rocrate.character <- function(x, ..., force_bag = FALSE) { +bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") { # check a valid path was given if (!dir.exists(x)) { stop("The given path, `x`, does not exist!\n", @@ -37,7 +40,7 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE) { rocrate_id <- paste0("rocrate-", digest::digest(Sys.time())) # create temporary directory, including `rocrate_id` - tmp_dir <- file.path(tempdir(), rocrate_id, "data") + tmp_dir <- file.path(".", rocrate_id, "data") # create sub-directories dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) @@ -71,12 +74,14 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE) { # compress bag contents inside original path output_bag <- file.path(x, paste0(rocrate_id, ".zip")) - bag_files <- list.files(file.path(tmp_dir, ".."), + bag_files <- list.files(dirname(tmp_dir), full.names = TRUE, recursive = TRUE) - utils::zip(output_bag, bag_files) + utils::zip(output_bag, bag_files, flags = zip_flags) message("RO-Crate successfully 'bagged'!\nFor details, see: ", output_bag) + + # attempt to delete the temporary directory created to bag the RO-Crate unlink(tmp_dir, recursive = TRUE, force = TRUE) } @@ -87,7 +92,7 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE) { #' file should be overwritten if already inside `path` (default: `FALSE`). #' #' @export -bag_rocrate.rocrate <- function(x, ..., path = NULL, overwrite = FALSE, force_bag = FALSE) { +bag_rocrate.rocrate <- function(x, ..., path = NULL, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X") { # check the `x` object is_rocrate(x) # check a valid path was given @@ -108,7 +113,7 @@ bag_rocrate.rocrate <- function(x, ..., path = NULL, overwrite = FALSE, force_ba write_rocrate(x, file.path(path, "ro-crate-metadata.json")) # call the bag method for the given `path` - bag_rocrate(path) + bag_rocrate(path, force_bag = force_bag, zip_flags = zip_flags) } #' @keywords internal @@ -116,7 +121,7 @@ bagit_declaration <- function(path) { declaration_lines <- c("BagIt-version: 1.0", "Tag-File-Character-Encoding: UTF-8") writeLines(declaration_lines, - con = file.path(path, "../bagit.txt")) + con = file.path(dirname(path), "bagit.txt")) } #' @keywords internal @@ -137,6 +142,6 @@ bagit_manifest <- function(path, files, algo = "sha512") { paste0(checksum, " data/", f) }) writeLines(manifest_lines, - con = file.path(path, "..", paste0("manifest-", algo, ".txt"))) + con = file.path(dirname(path), paste0("manifest-", algo, ".txt"))) return(invisible(manifest_lines)) } From 8474e21a5b1789557ceea0c14f72dc4fb55210f8 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 13:59:23 +0100 Subject: [PATCH 13/82] Update list of ignored files from builds and git --- .Rbuildignore | 3 ++- .gitignore | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.Rbuildignore b/.Rbuildignore index d9bd1f3..0ea1c10 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -4,4 +4,5 @@ ^codecov.yml$ ^cran-comments.md$ ^README.Rmd$ -^LICENSE.md$ \ No newline at end of file +^LICENSE.md$ +^inst$ \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7cc8b6a..1f658a9 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,6 @@ po/*~ # RStudio Connect folder rsconnect/ .Rproj.user +*.Rproj + +.DS_Store From 163aec87b1488e81539de17e6efef94b4ce0a96b Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 15:28:18 +0100 Subject: [PATCH 14/82] Update return object for the bag_rocrate function --- R/utils-bag.R | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index a0deabd..8ddf62e 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -25,6 +25,8 @@ bag_rocrate <- function(x, ...) { #' archiving/compressing the RO-Crate bag (default: `-r9X`, see #' `zip -h` in the terminal for more details). #' +#' @returns String with full path to the final RO-Crate bag. +#' #' @export bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") { # check a valid path was given @@ -44,7 +46,7 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") # create sub-directories dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) - on.exit(unlink(tmp_dir, recursive = TRUE, force = TRUE)) + on.exit(unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE)) # copy files inside the temporary directory rocrate_files_status <- rocrate_files |> @@ -82,17 +84,20 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") message("RO-Crate successfully 'bagged'!\nFor details, see: ", output_bag) # attempt to delete the temporary directory created to bag the RO-Crate - unlink(tmp_dir, recursive = TRUE, force = TRUE) + unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE) + + # return path to RO-Crate bag invisibly + return(invisible(output_bag)) } #' @rdname bag_rocrate #' -#' @param path String with path to the root of the RO-Crate (default: `NULL`). +#' @param path String with path to the root of the RO-Crate. #' @param overwrite Boolean flag to indicate if the RO-Crate metadata descriptor #' file should be overwritten if already inside `path` (default: `FALSE`). #' #' @export -bag_rocrate.rocrate <- function(x, ..., path = NULL, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X") { +bag_rocrate.rocrate <- function(x, ..., path, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X") { # check the `x` object is_rocrate(x) # check a valid path was given @@ -102,7 +107,7 @@ bag_rocrate.rocrate <- function(x, ..., path = NULL, overwrite = FALSE, force_ba # check if the given path contains an RO-Crate metadata descriptor file if (file.exists(file.path(path, "ro-crate-metadata.json"))){ if (overwrite) { - warning("Overwritting the RO-Crate metadata descriptor file!") + warning("Overwriting the RO-Crate metadata descriptor file!") } else { stop("The given `path` already contains an RO-Crate metadata descriptor ", "file, `ro-crate-metadata.json`. To ignore this check, set ", From 2bed2b380f1e00cb53b14855d0f04511968508a0 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 15:28:31 +0100 Subject: [PATCH 15/82] Fix typo --- R/entity.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/entity.R b/R/entity.R index ba947c2..8ce9503 100644 --- a/R/entity.R +++ b/R/entity.R @@ -117,7 +117,7 @@ add_entity_value <- function(rocrate, id, key, value, overwrite = TRUE) { #' @param x New entity. If a single value (e.g., `character`, `numeric`) is #' given, this is assumed to be the entity's `@id`, if a `list` is given, #' this is assumed to be a complete entity. Other options are objects of -#' type `person` and `organisation` (equivalenly `organization`). +#' type `person` and `organisation` (equivalently `organization`). #' @param ... Optional additional entity values/properties. Used when `x` is #' a single value. #' From 77ae58528c8c08163e070965b0752b0eb92f8dcf Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 15:51:58 +0100 Subject: [PATCH 16/82] Add spelling checks and list of ignored words --- DESCRIPTION | 3 ++- inst/WORDLIST | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 inst/WORDLIST diff --git a/DESCRIPTION b/DESCRIPTION index 60b96d1..07211ef 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,7 +11,8 @@ Authors@R: c( Description: R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2. License: MIT + file LICENSE -Suggests: +Suggests: + spelling, testthat (>= 3.0.0) Config/testthat/edition: 3 Encoding: UTF-8 diff --git a/inst/WORDLIST b/inst/WORDLIST new file mode 100644 index 0000000..beb7d56 --- /dev/null +++ b/inst/WORDLIST @@ -0,0 +1,15 @@ +BagIt +CMD +Codecov +ORCID +POSIXt +RO +columnmajor +com +mongo +org +ro +rocrate +rowmajor +stackoverflow +unclass From bfcaa5a3002e9c77f8aea814c0576ca43c8d72f0 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 15:52:39 +0100 Subject: [PATCH 17/82] Add tests for the bag_rocrate function --- tests/testthat/test-utils-bag.R | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tests/testthat/test-utils-bag.R diff --git a/tests/testthat/test-utils-bag.R b/tests/testthat/test-utils-bag.R new file mode 100644 index 0000000..c11c392 --- /dev/null +++ b/tests/testthat/test-utils-bag.R @@ -0,0 +1,67 @@ +test_that("bag_rocrate works", { + # create basic RO-Crate + basic_crate <- rocrateR::rocrate() + + # create temporary directory + tmp_dir <- file.path(tempdir(), + paste0("rocrate-tests-", digest::digest(Sys.time()))) + dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) + + # missing path + expect_error(rocrateR::bag_rocrate(basic_crate)) + + # use invalid path + expect_error(rocrateR::bag_rocrate(basic_crate, path = "/invalid/path")) + + # write RO-Crate to temporary file + tmp_file <- file.path(tmp_dir, "ro-crate-metadata.json") + + # check that the temporary file doesn't exist + expect_false(file.exists(tmp_file)) + + # write to temporary file + basic_crate |> + rocrateR::write_rocrate(path = tmp_file) + + # check that the temporary file exists + expect_true(file.exists(tmp_file)) + + # try to bag RO-Crate without overwriting previous one + expect_error(rocrateR::bag_rocrate(basic_crate, path = tmp_dir)) + + # force creation of bag + expect_error(rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, + overwrite = TRUE, + force_bag = TRUE)) + + # try to bag RO-Crate overwriting previous one + expect_warning(rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE)) + + # check that the RO-Crate bag exists + expect_true(file.exists(rocrate_bag_filename)) + + # check contents of RO-Crate bag + ## unzip the new RO-Crate bag + unzip(rocrate_bag_filename, exdir = file.path(tmp_dir, "..", "VALIDATION")) + ## list files in the RO-Crate bag + rocrate_bag_files <- list.files(file.path(tmp_dir, "..", "VALIDATION"), + recursive = TRUE) + ## subset files in the data/ directory + rocrate_bag_files <- + basename(rocrate_bag_files[grepl("/data/", rocrate_bag_files)]) + ## list files in the original input directory + tmp_dir_files <- list.files(tmp_dir, recursive = TRUE) + ## subset files in the RO-Crate bag, excluding the bag itself + tmp_dir_files <- + tmp_dir_files[!grepl(basename(rocrate_bag_filename), tmp_dir_files)] + ## compare main contents of the RO-Crate bag + expect_equal(rocrate_bag_files, tmp_dir_files) + + # delete temporary directory + unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE) + + # check if the temporary directory was successfully deleted + expect_false(dir.exists(tmp_dir)) +}) From 6d8171342b255871aecf51b33666978f5b78bad3 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 15:56:14 +0100 Subject: [PATCH 18/82] New build --- man/bag_rocrate.Rd | 20 +++++++++++++++++--- man/dot-validate_entity.Rd | 2 +- man/entity.Rd | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/man/bag_rocrate.Rd b/man/bag_rocrate.Rd index 8fd19cc..f636d92 100644 --- a/man/bag_rocrate.Rd +++ b/man/bag_rocrate.Rd @@ -8,9 +8,16 @@ \usage{ bag_rocrate(x, ...) -\method{bag_rocrate}{character}(x, ..., force_bag = FALSE) +\method{bag_rocrate}{character}(x, ..., force_bag = FALSE, zip_flags = "-r9X") -\method{bag_rocrate}{rocrate}(x, ..., path = NULL, overwrite = FALSE, force_bag = FALSE) +\method{bag_rocrate}{rocrate}( + x, + ..., + path, + overwrite = FALSE, + force_bag = FALSE, + zip_flags = "-r9X" +) } \arguments{ \item{x}{A string to a path containing at the very minimum an RO-Crate @@ -23,11 +30,18 @@ object with the \link[rocrateR]{rocrate} class.} a 'bag' even if not all the files were successfully bagged (default: \code{FALSE} ~ check if all the files were copied successfully).} -\item{path}{String with path to the root of the RO-Crate (default: \code{NULL}).} +\item{zip_flags}{String of characters with the flags to be used when +archiving/compressing the RO-Crate bag (default: \code{-r9X}, see +\code{zip -h} in the terminal for more details).} + +\item{path}{String with path to the root of the RO-Crate.} \item{overwrite}{Boolean flag to indicate if the RO-Crate metadata descriptor file should be overwritten if already inside \code{path} (default: \code{FALSE}).} } +\value{ +String with full path to the final RO-Crate bag. +} \description{ Bag the contents of an RO-Crate using the BagIt file packaging format v1.0. For more details see the definition: diff --git a/man/dot-validate_entity.Rd b/man/dot-validate_entity.Rd index 7ff9e07..8ef4e81 100644 --- a/man/dot-validate_entity.Rd +++ b/man/dot-validate_entity.Rd @@ -10,7 +10,7 @@ \item{x}{New entity. If a single value (e.g., \code{character}, \code{numeric}) is given, this is assumed to be the entity's \verb{@id}, if a \code{list} is given, this is assumed to be a complete entity. Other options are objects of -type \code{person} and \code{organisation} (equivalenly \code{organization}).} +type \code{person} and \code{organisation} (equivalently \code{organization}).} \item{...}{Optional additional entity values/properties. Used when \code{x} is a single value.} diff --git a/man/entity.Rd b/man/entity.Rd index 7044afb..17e82b7 100644 --- a/man/entity.Rd +++ b/man/entity.Rd @@ -10,7 +10,7 @@ entity(x, ...) \item{x}{New entity. If a single value (e.g., \code{character}, \code{numeric}) is given, this is assumed to be the entity's \verb{@id}, if a \code{list} is given, this is assumed to be a complete entity. Other options are objects of -type \code{person} and \code{organisation} (equivalenly \code{organization}).} +type \code{person} and \code{organisation} (equivalently \code{organization}).} \item{...}{Optional additional entity values/properties. Used when \code{x} is a single value.} From c8e6cc134dca6ca1fced1989b12d5d120d2dfbe4 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 17:13:32 +0100 Subject: [PATCH 19/82] Add new function bagit_tagmanifest to generate a tagmanifest file --- R/utils-bag.R | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/R/utils-bag.R b/R/utils-bag.R index 8ddf62e..4d4c171 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -71,6 +71,10 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") # create bag manifest and stored one level above `tmp_dir` bagit_manifest(tmp_dir, rocrate_files) + # create BagIt tagmanifest + bagit_tagmanifest(dirname(tmp_dir), + list.files(dirname(tmp_dir), pattern = "txt$")) + # create BagIt fetch file bagit_fetch(tmp_dir) @@ -150,3 +154,16 @@ bagit_manifest <- function(path, files, algo = "sha512") { con = file.path(dirname(path), paste0("manifest-", algo, ".txt"))) return(invisible(manifest_lines)) } + +#' @keywords internal +bagit_tagmanifest <- function(path, files, algo = "sha512") { + tagmanifest_lines <- sapply(files, function(f) { + # generate checksum + checksum <- digest::digest(file.path(path, f), algo = algo, file = TRUE) + # combine checksum with file path & name + paste0(checksum, " ", f) + }) + writeLines(tagmanifest_lines, + con = file.path(path, paste0("tagmanifest-", algo, ".txt"))) + return(invisible(tagmanifest_lines)) +} From 9cac2c5a2fbaeba9e41272bdfc65a807f5c00607 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 16 Oct 2025 17:14:14 +0100 Subject: [PATCH 20/82] Add instructions on how to create an RO-Crate bag --- README.Rmd | 63 +++++++++++++++++++++++++++++++++++++++++++--- README.md | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 129 insertions(+), 8 deletions(-) diff --git a/README.Rmd b/README.Rmd index cbf4752..00dae08 100644 --- a/README.Rmd +++ b/README.Rmd @@ -123,24 +123,79 @@ my_second_ro_crate <- rocrateR::rocrate(person_rvd, organisation_uol) |> print(my_second_ro_crate) ``` -## 3. Validation (experimental) +## 3. Create an RO-Crate Bag + +Here we will explore the BagIt file packaging format, which is the recommended +to use for _bagging_ RO-Crates. BagIt is described in [RFC 8493](https://tools.ietf.org/html/rfc8493): + +> [BagIt is] … a set of hierarchical file layout conventions for storage and transfer of arbitrary digital content. A “bag” has just enough structure to enclose descriptive metadata “tags” and a file “payload” but does not require knowledge of the payload’s internal semantics. This BagIt format is suitable for reliable storage and transfer. + +In this package, the function `rocrateR::bag_rocrate` will take either a `path` +pointing to the root of an RO-Crate (must have at least an RO-Crate metadata +descriptor file, `ro-crate-metadata.json`) or an RO-Crate object created with +`rocrateR::rocrate` (and alternatives), as shown in step 1. + +For more details, run the following command: + +```r +?rocrateR::bag_rocrate +``` + +----- + +Here we will create an RO-Crate bag inside temporary directory: + +```{r} +basic_ro_crate <- rocrateR::rocrate() + +# create temporary directory +tmp_dir <- file.path(tempdir(), paste0("rocrate-", digest::digest(Sys.time()))) +dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) + +# then, we can create the RO-Crate bag +path_to_rocrate_bag <- basic_ro_crate |> + rocrateR::bag_rocrate(path = tmp_dir) +``` + +We can explore the contents of the RO-Crate bag with the following commands: + +```{r, echo=FALSE, eval=FALSE} +# list files without unzipping +unzip(path_to_rocrate_bag, list = TRUE) +``` + +```{r} +# extract files in temporary directory +unzip(path_to_rocrate_bag, exdir = file.path(tmp_dir, "ROC")) + +# create tree with the files +fs::dir_tree(file.path(tmp_dir, "ROC")) +``` + +```{r} +# delete temporary directory +unlink(tmp_dir, recursive = TRUE, force = TRUE) +``` + + +## 4. Validation (experimental) As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at https://www.researchobject.org/ro-crate/tools), here we will explore the Python package [`rocrate-validator`](https://github.com/crs4/rocrate-validator). For installation details, please visit https://github.com/crs4/rocrate-validator. Note that we will rely on [`{reticulate}`](https://cran.r-project.org/package=reticulate) to install and execute the validator within R: -### 3.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +### 4.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) ``` r pak::pkg_install("reticulate") ``` -### 3.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) +### 4.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) ``` r reticulate::py_install("roc-validator", env = "rocrateR") ``` -### 3.3. Create example RO-Crate and validate it +### 4.3. Create example RO-Crate and validate it ```{r} basic_ro_crate <- rocrateR::rocrate() diff --git a/README.md b/README.md index f5d78eb..daecee7 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,73 @@ print(my_second_ro_crate) #> } ``` -## 3. Validation (experimental) +## 3. Create an RO-Crate Bag + +Here we will explore the BagIt file packaging format, which is the +recommended to use for *bagging* RO-Crates. BagIt is described in [RFC +8493](https://tools.ietf.org/html/rfc8493): + +> \[BagIt is\] … a set of hierarchical file layout conventions for +> storage and transfer of arbitrary digital content. A “bag” has just +> enough structure to enclose descriptive metadata “tags” and a file +> “payload” but does not require knowledge of the payload’s internal +> semantics. This BagIt format is suitable for reliable storage and +> transfer. + +In this package, the function `rocrateR::bag_rocrate` will take either a +`path` pointing to the root of an RO-Crate (must have at least an +RO-Crate metadata descriptor file, `ro-crate-metadata.json`) or an +RO-Crate object created with `rocrateR::rocrate` (and alternatives), as +shown in step 1. + +For more details, run the following command: + +``` r +?rocrateR::bag_rocrate +``` + +------------------------------------------------------------------------ + +Here we will create an RO-Crate bag inside temporary directory: + +``` r +basic_ro_crate <- rocrateR::rocrate() + +# create temporary directory +tmp_dir <- file.path(tempdir(), paste0("rocrate-", digest::digest(Sys.time()))) +dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) + +# then, we can create the RO-Crate bag +path_to_rocrate_bag <- basic_ro_crate |> + rocrateR::bag_rocrate(path = tmp_dir) +#> RO-Crate successfully 'bagged'! +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmpt2xmUG/rocrate-547222a530869c27d7caa4da5e83182b/rocrate-93bbbcdcd6d4e38ced4189b1ebe27215.zip +``` + +We can explore the contents of the RO-Crate bag with the following +commands: + +``` r +# extract files in temporary directory +unzip(path_to_rocrate_bag, exdir = file.path(tmp_dir, "ROC")) + +# create tree with the files +fs::dir_tree(file.path(tmp_dir, "ROC")) +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmpt2xmUG/rocrate-547222a530869c27d7caa4da5e83182b/ROC +#> └── rocrate-93bbbcdcd6d4e38ced4189b1ebe27215 +#> ├── bagit.txt +#> ├── data +#> │ └── ro-crate-metadata.json +#> ├── manifest-sha512.txt +#> └── tagmanifest-sha512.txt +``` + +``` r +# delete temporary directory +unlink(tmp_dir, recursive = TRUE, force = TRUE) +``` + +## 4. Validation (experimental) As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at @@ -232,19 +298,19 @@ Note that we will rely on [`{reticulate}`](https://cran.r-project.org/package=reticulate) to install and execute the validator within R: -### 3.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +### 4.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) ``` r pak::pkg_install("reticulate") ``` -### 3.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) +### 4.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) ``` r reticulate::py_install("roc-validator", env = "rocrateR") ``` -### 3.3. Create example RO-Crate and validate it +### 4.3. Create example RO-Crate and validate it ``` r basic_ro_crate <- rocrateR::rocrate() From 09f1e26e7853021e8c2dfb52da09d8a4b1fef6b4 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 17 Oct 2025 17:33:09 +0100 Subject: [PATCH 21/82] Add first draft of function to validate RO-Crate bag, is_rocrate_bag --- R/utils-bag.R | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/R/utils-bag.R b/R/utils-bag.R index 4d4c171..e50bb06 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -167,3 +167,86 @@ bagit_tagmanifest <- function(path, files, algo = "sha512") { con = file.path(path, paste0("tagmanifest-", algo, ".txt"))) return(invisible(tagmanifest_lines)) } + +#' Check if path points to a valid RO-Crate bag +#' +#' @param path String with full path to a compressed file contain an RO-Crate +#' bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path +#' to a directory containing an RO-Crate bag. +#' @param algo String with algorithm used to generate the RO-Crate bag +#' (default: `"sha512"`). +#' +#' @returns Returns invisibly the RO-Crate pointed by `path`. +#' @export +is_rocrate_bag <- function(path, algo = "sha512") { + # initialise return object + ro_crate <- NULL + + # check if path is a directory or file + idx <- c(dir.exists(path), file.exists(path)) + if (!all(idx)){ + stop("The given `path` is invalid!") + } else if(idx[1]) { # path is a valid directory + # no extra steps required + } else if (idx[2]) { # path is a valid file + # check if file has .zip extension + if (!grepl("zip$", path, ignore.case = TRUE)) { + stop("The given `path` does not point to a .zip file!") + } + + # create temporary directory + tmp_dir <- file.path(tempdir(), digest::digest(Sys.time())) + on.exit(unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE)) + + # extract contents inside temporary directory + unzip(path, exdir = tmp_dir) + + # list directories inside the RO-Crate bag + rocrate_bag_dir <- list.dirs(tmp_dir, recursive = FALSE, full.names = FALSE) + + # check if the RO-Crate bag has only a root directory + if (length(rocrate_bag_dir) == 0) { + rocrate_bag_dir <- "." + } + + # check if the RO-Crate bag has more than one directory, only 1 is expected + if (length(unique(rocrate_bag_dir)) > 1) { + stop("A valid RO-Crate bag should have ONE and ONLY ONE root directory!", + "\nThe given path has the following: ", + paste0(" - ", unique(rocrate_bag_dir), "\n")) + } + + # update path + path <- file.path(tmp_dir, rocrate_bag_dir) + } + # call the .validate_rocrate_bag function + ro_crate <- .validate_rocrate_bag(path, algo = algo) + return(invisible(ro_crate)) +} + +#' @keywords internal +.validate_rocrate_bag <- function(path, algo = "sha512") { + # list files inside the given path / top level only + rocrate_bag_files <- list.files(path, recursive = FALSE) + + # check that at least the following files & directory are in the given path + expected_files_dir <- c("bagit.txt", "data", paste0("manifest-", algo, ".txt")) + idx <- expected_files_dir %in% rocrate_bag_files + if (!all(idx)) { + stop("The given `path` is missing the following:", + paste0(" - ", expected_files_dir[idx], "\n")) + } + + # list files inside the given path / all levels + rocrate_bag_files <- list.files(path, recursive = TRUE) + +} + +unbag_rocrate <- function(path, output = path) { + # check a valid path was given + if (!file.exists(path)) { + stop("The given path, `path`, does not exist!") + } + + # check if +} From 0bdb0b5ac68c343f6c695446a8a4acfa0a9ee161 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 20 Oct 2025 16:41:35 +0100 Subject: [PATCH 22/82] Update the internal .validate_rocrate_bag function to validate the BagIt declaration, BagIt manifest and optionally the BagIt tagmanifest, including internal functions to validate each of those --- R/utils-bag.R | 211 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 174 insertions(+), 37 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index e50bb06..1b86e59 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -10,7 +10,8 @@ #' @param ... Additional parameters, see below. #' #' @export -#' +#' +#' @family bag_rocrate # @examples bag_rocrate <- function(x, ...) { UseMethod("bag_rocrate", x) @@ -174,79 +175,215 @@ bagit_tagmanifest <- function(path, files, algo = "sha512") { #' bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path #' to a directory containing an RO-Crate bag. #' @param algo String with algorithm used to generate the RO-Crate bag -#' (default: `"sha512"`). +#' (default: `"sha512"`). See \link[digest]{digest} for more details. +#' @param bagit_version String with version of BagIt used to generate the +#' RO-Crate bag (default: `"1.0"`). +#' See \url{https://www.rfc-editor.org/info/rfc8493} for more details. #' #' @returns Returns invisibly the RO-Crate pointed by `path`. #' @export -is_rocrate_bag <- function(path, algo = "sha512") { - # initialise return object +#' +#' @family bag_rocrate +is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { + # initialise object that will be returned ro_crate <- NULL - # check if path is a directory or file + # check if given path is a directory or a file idx <- c(dir.exists(path), file.exists(path)) - if (!all(idx)){ + if (all(!idx)){ stop("The given `path` is invalid!") } else if(idx[1]) { # path is a valid directory # no extra steps required } else if (idx[2]) { # path is a valid file - # check if file has .zip extension - if (!grepl("zip$", path, ignore.case = TRUE)) { - stop("The given `path` does not point to a .zip file!") - } - # create temporary directory tmp_dir <- file.path(tempdir(), digest::digest(Sys.time())) on.exit(unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE)) - # extract contents inside temporary directory - unzip(path, exdir = tmp_dir) - - # list directories inside the RO-Crate bag - rocrate_bag_dir <- list.dirs(tmp_dir, recursive = FALSE, full.names = FALSE) - - # check if the RO-Crate bag has only a root directory - if (length(rocrate_bag_dir) == 0) { - rocrate_bag_dir <- "." - } - - # check if the RO-Crate bag has more than one directory, only 1 is expected - if (length(unique(rocrate_bag_dir)) > 1) { - stop("A valid RO-Crate bag should have ONE and ONLY ONE root directory!", - "\nThe given path has the following: ", - paste0(" - ", unique(rocrate_bag_dir), "\n")) - } - - # update path - path <- file.path(tmp_dir, rocrate_bag_dir) + # extract contents of the RO-Crate bag inside temporary directory AND + # update path, so it points to the contents of the RO-Crate bag + path <- unbag_rocrate(path, output = tmp_dir, quiet = TRUE) } # call the .validate_rocrate_bag function ro_crate <- .validate_rocrate_bag(path, algo = algo) return(invisible(ro_crate)) } +#' Verify if a given path points to a valid RO-Crate bag +#' +#' @inheritParams is_rocrate_bag +#' +#' @returns Returns invisibly the RO-Crate pointed by `path`. #' @keywords internal -.validate_rocrate_bag <- function(path, algo = "sha512") { +.validate_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { # list files inside the given path / top level only rocrate_bag_files <- list.files(path, recursive = FALSE) # check that at least the following files & directory are in the given path - expected_files_dir <- c("bagit.txt", "data", paste0("manifest-", algo, ".txt")) - idx <- expected_files_dir %in% rocrate_bag_files + expected_contents <- c("bagit.txt", "data", paste0("manifest-", algo, ".txt")) + idx <- expected_contents %in% rocrate_bag_files if (!all(idx)) { stop("The given `path` is missing the following:", - paste0(" - ", expected_files_dir[idx], "\n")) + paste0(" - ", expected_contents[idx], "\n")) } # list files inside the given path / all levels rocrate_bag_files <- list.files(path, recursive = TRUE) + # check for valid BagIt declaration + valid_bagit_declaration <- .validate_bagit_declaration(path, algo, bagit_version) + + # check integrity of manifest file + valid_bagit_manifest <- .validate_bagit_manifest(path, algo) + + # check integrity of tagmanifest file (if found) + if (file.exists(file.path(path, paste0("tagmanifest-", algo, ".txt")))) { + valid_bagit_tagmanifest <- + .validate_bagit_manifest(path, algo, manifest_suffix = "tagmanifest") + } else { + valid_bagit_tagmanifest <- list(status = TRUE) + } + + # validation overview + idx <- c( + valid_bagit_declaration$status, + valid_bagit_manifest$status, + valid_bagit_tagmanifest$status + ) + + if (any(!idx)) { + error_message <- "Invalid RO-Crate bag! The following issues were found:\n" + # BagIt declaration (required) + if (!idx[1]) { + error_message <- paste0( + error_message, + " BagIt declaration (bagit.txt) missing the following:\n", + paste0(" - ", valid_bagit_declaration$errors, collapse = "\n") + ) + } + # BagIt manifest (required) + if (!idx[2]) { + error_message <- paste0( + error_message, + " BagIt manifest contains invalid file(s):\n", + paste0(" - ", valid_bagit_manifest$errors, collapse = "\n") + ) + } + # BagIt tagmanifest (optional) + if (!idx[1]) { + error_message <- paste0( + error_message, + " BagIt tagmanifest contains invalid file(s):\n", + paste0(" - ", valid_bagit_tagmanifest$errors, collapse = "\n") + ) + } + # print error message and stop execution + stop(error_message) + } + + # if no errors where found, load the and return the RO-Crate in the bag + rocrate_contents <- file.path(path, "data/ro-crate-metadata.json") |> + rocrateR::read_rocrate() + return(rocrate_contents) +} + +#' Validate BagIt declaration +#' +#' @inheritParams is_rocrate_bag +#' +#' @returns A list with `status` and `errors` identified. +#' @keywords internal +#' @rdname bagit_declaration +.validate_bagit_declaration <- function(path, algo = "sha512", bagit_version = "1.0") { + # load the BagIt declaration file + bagit_declaration_txt <- readLines(file.path(path, "bagit.txt")) + # expect lines + expected_bagit_declaration <- c(paste0("BagIt-version: ", bagit_version), + "Tag-File-Character-Encoding: UTF-8") + valid_bagit_declaration_validity <- + expected_bagit_declaration %in% bagit_declaration_txt + # return list with status: TRUE = all lines found, FALSE = missing line AND + # errors: vector of the missing lines (if any) + list( + status = all(valid_bagit_declaration_validity), + errors = expected_bagit_declaration[!valid_bagit_declaration_validity] + ) } -unbag_rocrate <- function(path, output = path) { +#' Validate BagIt declaration +#' +#' @inheritParams is_rocrate_bag +#' @param manifest_suffix String with suffix for the manifest file (default: +#' `"manifest"`). +#' +#' @returns A list with `status` and `errors` identified. +#' @keywords internal +#' @rdname bagit_manifest +.validate_bagit_manifest <- function(path, algo = "sha512", manifest_suffix = "manifest") { + # load the manifest file + manifest_filename <- paste0(manifest_suffix, "-", algo, ".txt") + bagit_manifest_txt <- file.path(path, manifest_filename) |> + utils::read.table(header = FALSE, sep = " ", col.names = c("checksum", "filename")) + # check all the files in the manifest file + bagit_manifest_txt_validity <- seq_len(nrow(bagit_manifest_txt)) |> + sapply(function(i) { + est_checksum <- file.path(path, bagit_manifest_txt[i, "filename"]) |> + digest::digest(algo = algo, file = TRUE) + est_checksum == bagit_manifest_txt[i, "checksum"] + }) + # return list with status: TRUE = all valid, FALSE = invalid file found AND + # errors: vector of invalid files (if any) + list( + status = all(bagit_manifest_txt_validity), + errors = bagit_manifest_txt[!bagit_manifest_txt_validity, "filename"] + ) +} + +#' 'Unbag' (extract) RO-Crate packed with BagIt +#' +#' @param path String with path to compressed file containing an RO-Crate bag. +#' @param output String with target path where the contents will be extracted +#' (default: `path` - same path as input). +#' @param quiet Boolean flag to indicate if messages should be supressed +#' (default: `FALSE` - display messages). +#' +#' @export +#' +#' @returns String with path to root of the RO-Crate, invisibly. +#' +#' @family bag_rocrate +unbag_rocrate <- function(path, output = path, quiet = FALSE) { # check a valid path was given if (!file.exists(path)) { stop("The given path, `path`, does not exist!") } - # check if + # check if file has .zip extension + if (!grepl("zip$", path, ignore.case = TRUE)) { + stop("The given `path` does not point to a .zip file!") + } + + # extract contents inside the `output` path + utils::unzip(path, exdir = output) + + # list directories inside the RO-Crate bag + rocrate_bag_dir <- list.dirs(output, recursive = FALSE, full.names = FALSE) + + # check if the RO-Crate bag has only a root directory + if (length(rocrate_bag_dir) == 0) { + rocrate_bag_dir <- "." + } + + # check if the RO-Crate bag has more than one directory, only 1 is expected + if (length(unique(rocrate_bag_dir)) > 1) { + stop("A valid RO-Crate bag should have ONE and ONLY ONE root directory!", + "\nThe given path has the following: ", + paste0(" - ", unique(rocrate_bag_dir), "\n")) + } + + if (!quiet) { + message("RO-Crate bag successfully extracted! For details, see:\n", output) + } + + # path to root of the RO-Crate bag + return(invisible(file.path(output, rocrate_bag_dir))) } From f6bcf0b9f1d1203d67d6f728f6c42f1b5b0cd811 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 20 Oct 2025 16:42:10 +0100 Subject: [PATCH 23/82] New build --- NAMESPACE | 2 ++ man/bag_rocrate.Rd | 6 ++++++ man/bagit_declaration.Rd | 27 +++++++++++++++++++++++++++ man/bagit_manifest.Rd | 26 ++++++++++++++++++++++++++ man/dot-validate_rocrate_bag.Rd | 27 +++++++++++++++++++++++++++ man/is_rocrate_bag.Rd | 32 ++++++++++++++++++++++++++++++++ man/unbag_rocrate.Rd | 29 +++++++++++++++++++++++++++++ 7 files changed, 149 insertions(+) create mode 100644 man/bagit_declaration.Rd create mode 100644 man/bagit_manifest.Rd create mode 100644 man/dot-validate_rocrate_bag.Rd create mode 100644 man/is_rocrate_bag.Rd create mode 100644 man/unbag_rocrate.Rd diff --git a/NAMESPACE b/NAMESPACE index 4655c3d..1fdc51f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -9,8 +9,10 @@ export(add_entity_value) export(bag_rocrate) export(entity) export(is_rocrate) +export(is_rocrate_bag) export(read_rocrate) export(remove_entity) export(rocrate) export(rocrate_5s) +export(unbag_rocrate) export(write_rocrate) diff --git a/man/bag_rocrate.Rd b/man/bag_rocrate.Rd index f636d92..d91f543 100644 --- a/man/bag_rocrate.Rd +++ b/man/bag_rocrate.Rd @@ -47,3 +47,9 @@ Bag the contents of an RO-Crate using the BagIt file packaging format v1.0. For more details see the definition: \url{https://datatracker.ietf.org/doc/html/rfc8493} } +\seealso{ +Other bag_rocrate: +\code{\link{is_rocrate_bag}()}, +\code{\link{unbag_rocrate}()} +} +\concept{bag_rocrate} diff --git a/man/bagit_declaration.Rd b/man/bagit_declaration.Rd new file mode 100644 index 0000000..38c0473 --- /dev/null +++ b/man/bagit_declaration.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-bag.R +\name{.validate_bagit_declaration} +\alias{.validate_bagit_declaration} +\title{Validate BagIt declaration} +\usage{ +.validate_bagit_declaration(path, algo = "sha512", bagit_version = "1.0") +} +\arguments{ +\item{path}{String with full path to a compressed file contain an RO-Crate +bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path +to a directory containing an RO-Crate bag.} + +\item{algo}{String with algorithm used to generate the RO-Crate bag +(default: \code{"sha512"}). See \link[digest]{digest} for more details.} + +\item{bagit_version}{String with version of BagIt used to generate the +RO-Crate bag (default: \code{"1.0"}). +See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} +} +\value{ +A list with \code{status} and \code{errors} identified. +} +\description{ +Validate BagIt declaration +} +\keyword{internal} diff --git a/man/bagit_manifest.Rd b/man/bagit_manifest.Rd new file mode 100644 index 0000000..94a9e9d --- /dev/null +++ b/man/bagit_manifest.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-bag.R +\name{.validate_bagit_manifest} +\alias{.validate_bagit_manifest} +\title{Validate BagIt declaration} +\usage{ +.validate_bagit_manifest(path, algo = "sha512", manifest_suffix = "manifest") +} +\arguments{ +\item{path}{String with full path to a compressed file contain an RO-Crate +bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path +to a directory containing an RO-Crate bag.} + +\item{algo}{String with algorithm used to generate the RO-Crate bag +(default: \code{"sha512"}). See \link[digest]{digest} for more details.} + +\item{manifest_suffix}{String with suffix for the manifest file (default: +\code{"manifest"}).} +} +\value{ +A list with \code{status} and \code{errors} identified. +} +\description{ +Validate BagIt declaration +} +\keyword{internal} diff --git a/man/dot-validate_rocrate_bag.Rd b/man/dot-validate_rocrate_bag.Rd new file mode 100644 index 0000000..9ebae8b --- /dev/null +++ b/man/dot-validate_rocrate_bag.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-bag.R +\name{.validate_rocrate_bag} +\alias{.validate_rocrate_bag} +\title{Verify if a given path points to a valid RO-Crate bag} +\usage{ +.validate_rocrate_bag(path, algo = "sha512", bagit_version = "1.0") +} +\arguments{ +\item{path}{String with full path to a compressed file contain an RO-Crate +bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path +to a directory containing an RO-Crate bag.} + +\item{algo}{String with algorithm used to generate the RO-Crate bag +(default: \code{"sha512"}). See \link[digest]{digest} for more details.} + +\item{bagit_version}{String with version of BagIt used to generate the +RO-Crate bag (default: \code{"1.0"}). +See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} +} +\value{ +Returns invisibly the RO-Crate pointed by \code{path}. +} +\description{ +Verify if a given path points to a valid RO-Crate bag +} +\keyword{internal} diff --git a/man/is_rocrate_bag.Rd b/man/is_rocrate_bag.Rd new file mode 100644 index 0000000..88c8d58 --- /dev/null +++ b/man/is_rocrate_bag.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-bag.R +\name{is_rocrate_bag} +\alias{is_rocrate_bag} +\title{Check if path points to a valid RO-Crate bag} +\usage{ +is_rocrate_bag(path, algo = "sha512", bagit_version = "1.0") +} +\arguments{ +\item{path}{String with full path to a compressed file contain an RO-Crate +bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path +to a directory containing an RO-Crate bag.} + +\item{algo}{String with algorithm used to generate the RO-Crate bag +(default: \code{"sha512"}). See \link[digest]{digest} for more details.} + +\item{bagit_version}{String with version of BagIt used to generate the +RO-Crate bag (default: \code{"1.0"}). +See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} +} +\value{ +Returns invisibly the RO-Crate pointed by \code{path}. +} +\description{ +Check if path points to a valid RO-Crate bag +} +\seealso{ +Other bag_rocrate: +\code{\link{bag_rocrate}()}, +\code{\link{unbag_rocrate}()} +} +\concept{bag_rocrate} diff --git a/man/unbag_rocrate.Rd b/man/unbag_rocrate.Rd new file mode 100644 index 0000000..5c8a589 --- /dev/null +++ b/man/unbag_rocrate.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-bag.R +\name{unbag_rocrate} +\alias{unbag_rocrate} +\title{'Unbag' (extract) RO-Crate packed with BagIt} +\usage{ +unbag_rocrate(path, output = path, quiet = FALSE) +} +\arguments{ +\item{path}{String with path to compressed file containing an RO-Crate bag.} + +\item{output}{String with target path where the contents will be extracted +(default: \code{path} - same path as input).} + +\item{quiet}{Boolean flag to indicate if messages should be supressed +(default: \code{FALSE} - display messages).} +} +\value{ +String with path to root of the RO-Crate, invisibly. +} +\description{ +'Unbag' (extract) RO-Crate packed with BagIt +} +\seealso{ +Other bag_rocrate: +\code{\link{bag_rocrate}()}, +\code{\link{is_rocrate_bag}()} +} +\concept{bag_rocrate} From ef74c6e9a0aee35870a5f9473fe1219e1459bd8f Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 21 Oct 2025 10:09:15 +0100 Subject: [PATCH 24/82] Update calls to stop and warning to exclude the function call --- R/utils-bag.R | 62 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index 1b86e59..7bd1f49 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -33,12 +33,18 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") # check a valid path was given if (!dir.exists(x)) { stop("The given path, `x`, does not exist!\n", - "Create with:\n\t`mkdir ", x, "`") + "Create with:\n\t`mkdir ", x, "`", call. = FALSE) } # list all the files inside the given path rocrate_files <- list.files(x, recursive = TRUE) + # check if the given path is empty + if (length(rocrate_files) == 0) { + stop("No files were found inside the given path: \n", + x, call. = FALSE) + } + # create an RO-Crate ID rocrate_id <- paste0("rocrate-", digest::digest(Sys.time())) @@ -60,10 +66,17 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") }) # check that all the files were copied, unless force_bag = TRUE - if (force_bag || !all(rocrate_files_status)) { - stop("It was not possible to bag all your files!\nMissing file(s):\n", - paste0(" - ", rocrate_files[rocrate_files_status], collapse = "\n"), - "\n\nTo ignore this check, set `force_bag = TRUE`.") + if (!all(rocrate_files_status)) { + if (!force) { + stop("It was not possible to bag all your files!\nMissing file(s):\n", + paste0(" - ", rocrate_files[!rocrate_files_status], collapse = "\n"), + "\n\nTo ignore this check, set `force_bag = TRUE`.", call. = FALSE) + } else { + warning("Forcing the creation of the RO-Crate bag! ", + "Not all the files were copied: \n", + paste0("- ", rocrate_files[!rocrate_files_status], "\n"), + call. = FALSE) + } } # create bag declaration @@ -107,16 +120,17 @@ bag_rocrate.rocrate <- function(x, ..., path, overwrite = FALSE, force_bag = FAL is_rocrate(x) # check a valid path was given if (!dir.exists(path)) { - stop("The given `path` does not exist!\nCreate with:\n\t`mkdir ", path, "`") + stop("The given `path` does not exist!\nCreate with:\n\t`mkdir ", path, "`", + call. = FALSE) } # check if the given path contains an RO-Crate metadata descriptor file if (file.exists(file.path(path, "ro-crate-metadata.json"))){ if (overwrite) { - warning("Overwriting the RO-Crate metadata descriptor file!") + warning("Overwriting the RO-Crate metadata descriptor file!", call. = FALSE) } else { stop("The given `path` already contains an RO-Crate metadata descriptor ", "file, `ro-crate-metadata.json`. To ignore this check, set ", - "`overwrite = TRUE` when calling this function!") + "`overwrite = TRUE` when calling this function!", call. = FALSE) } } # write the RO-Crate metadata descriptor file @@ -191,13 +205,13 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { # check if given path is a directory or a file idx <- c(dir.exists(path), file.exists(path)) if (all(!idx)){ - stop("The given `path` is invalid!") + stop("The given `path` is invalid!", call. = FALSE) } else if(idx[1]) { # path is a valid directory # no extra steps required } else if (idx[2]) { # path is a valid file # create temporary directory tmp_dir <- file.path(tempdir(), digest::digest(Sys.time())) - on.exit(unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE)) + on.exit(unlink(tmp_dir, recursive = TRUE, force = TRUE)) # extract contents of the RO-Crate bag inside temporary directory AND # update path, so it points to the contents of the RO-Crate bag @@ -222,8 +236,8 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { expected_contents <- c("bagit.txt", "data", paste0("manifest-", algo, ".txt")) idx <- expected_contents %in% rocrate_bag_files if (!all(idx)) { - stop("The given `path` is missing the following:", - paste0(" - ", expected_contents[idx], "\n")) + stop("The given `path` is missing the following:\n", + paste0(" - ", expected_contents[!idx], "\n"), call. = FALSE) } # list files inside the given path / all levels @@ -256,7 +270,7 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { if (!idx[1]) { error_message <- paste0( error_message, - " BagIt declaration (bagit.txt) missing the following:\n", + "\n BagIt declaration (bagit.txt) missing the following:\n", paste0(" - ", valid_bagit_declaration$errors, collapse = "\n") ) } @@ -264,25 +278,27 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { if (!idx[2]) { error_message <- paste0( error_message, - " BagIt manifest contains invalid file(s):\n", + "\n BagIt manifest contains invalid file(s):\n", paste0(" - ", valid_bagit_manifest$errors, collapse = "\n") ) } # BagIt tagmanifest (optional) - if (!idx[1]) { + if (!idx[3]) { error_message <- paste0( error_message, - " BagIt tagmanifest contains invalid file(s):\n", + "\n BagIt tagmanifest contains invalid file(s):\n", paste0(" - ", valid_bagit_tagmanifest$errors, collapse = "\n") ) } # print error message and stop execution - stop(error_message) + stop(error_message, call. = FALSE) } # if no errors where found, load the and return the RO-Crate in the bag rocrate_contents <- file.path(path, "data/ro-crate-metadata.json") |> rocrateR::read_rocrate() + + message("Valid RO-Crate found!") return(rocrate_contents) } @@ -342,8 +358,8 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { #' #' @param path String with path to compressed file containing an RO-Crate bag. #' @param output String with target path where the contents will be extracted -#' (default: `path` - same path as input). -#' @param quiet Boolean flag to indicate if messages should be supressed +#' (default: `dirname(path)` - same directory as input `path`). +#' @param quiet Boolean flag to indicate if messages should be suppressed #' (default: `FALSE` - display messages). #' #' @export @@ -351,15 +367,15 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { #' @returns String with path to root of the RO-Crate, invisibly. #' #' @family bag_rocrate -unbag_rocrate <- function(path, output = path, quiet = FALSE) { +unbag_rocrate <- function(path, output = dirname(path), quiet = FALSE) { # check a valid path was given if (!file.exists(path)) { - stop("The given path, `path`, does not exist!") + stop("The given path, `path`, does not exist!", call. = FALSE) } # check if file has .zip extension if (!grepl("zip$", path, ignore.case = TRUE)) { - stop("The given `path` does not point to a .zip file!") + stop("The given `path` does not point to a .zip file!", call. = FALSE) } # extract contents inside the `output` path @@ -377,7 +393,7 @@ unbag_rocrate <- function(path, output = path, quiet = FALSE) { if (length(unique(rocrate_bag_dir)) > 1) { stop("A valid RO-Crate bag should have ONE and ONLY ONE root directory!", "\nThe given path has the following: ", - paste0(" - ", unique(rocrate_bag_dir), "\n")) + paste0(" - ", unique(rocrate_bag_dir), "\n"), call. = FALSE) } if (!quiet) { From 18a894c4fa99192e95d7c81a3c8c9c4ab1d08c8e Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 21 Oct 2025 10:09:57 +0100 Subject: [PATCH 25/82] Add tests for is_rocrate_bag and unbag_rocrate --- tests/testthat/test-utils-bag.R | 157 ++++++++++++++++++++++++++++++-- 1 file changed, 151 insertions(+), 6 deletions(-) diff --git a/tests/testthat/test-utils-bag.R b/tests/testthat/test-utils-bag.R index c11c392..638a549 100644 --- a/tests/testthat/test-utils-bag.R +++ b/tests/testthat/test-utils-bag.R @@ -30,14 +30,28 @@ test_that("bag_rocrate works", { expect_error(rocrateR::bag_rocrate(basic_crate, path = tmp_dir)) # force creation of bag - expect_error(rocrate_bag_filename <- basic_crate |> - rocrateR::bag_rocrate(path = tmp_dir, + expect_warning(rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE, - force_bag = TRUE)) + force_bag = FALSE)) + # check that the RO-Crate bag exists + expect_true(file.exists(rocrate_bag_filename)) + + # delete intermediate RO-Crate bag + unlink(rocrate_bag_filename, force = TRUE) + + # delete RO-Crate metadata descriptor file + unlink(file.path(dirname(rocrate_bag_filename), "ro-crate-metadata.json"), + force = TRUE) + + # attempt bagging empty directory + expect_error(dirname(rocrate_bag_filename) |> + rocrateR::bag_rocrate(overwrite = TRUE, + force_bag = FALSE)) # try to bag RO-Crate overwriting previous one - expect_warning(rocrate_bag_filename <- basic_crate |> - rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE)) + rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE) # check that the RO-Crate bag exists expect_true(file.exists(rocrate_bag_filename)) @@ -60,8 +74,139 @@ test_that("bag_rocrate works", { expect_equal(rocrate_bag_files, tmp_dir_files) # delete temporary directory - unlink(dirname(tmp_dir), recursive = TRUE, force = TRUE) + unlink(tmp_dir, recursive = TRUE, force = TRUE) # check if the temporary directory was successfully deleted expect_false(dir.exists(tmp_dir)) }) + +test_that("is_rocrate_bag works", { + # create basic RO-Crate + basic_crate <- rocrateR::rocrate() + + # create temporary directory + tmp_dir <- file.path(tempdir(), + paste0("rocrate-tests-", digest::digest(Sys.time()))) + dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) + + # missing path + expect_error(rocrateR::is_rocrate_bag()) + + # invalid path + expect_error(rocrateR::is_rocrate_bag("/invalid/path")) + + # path to empty directory + expect_error(rocrateR::is_rocrate_bag(tmp_dir)) + + # write RO-Crate to temporary file + tmp_file <- file.path(tmp_dir, "ro-crate-metadata.json") + + # check that the temporary file doesn't exist + expect_false(file.exists(tmp_file)) + + # write to temporary file + basic_crate |> + rocrateR::write_rocrate(path = tmp_file) + + # check that the temporary file exists + expect_true(file.exists(tmp_file)) + + # try to bag RO-Crate without overwriting previous one + expect_error(rocrateR::bag_rocrate(basic_crate, path = tmp_dir)) + + # try to bag RO-Crate overwriting previous one + expect_message( + expect_warning(rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE) + ) + ) + + # check that the RO-Crate bag exists + expect_true(file.exists(rocrate_bag_filename)) + + # check that the created object is a valid RO-Crate bag + expect_message( + basic_crate_from_bag <- rocrateR::is_rocrate_bag(rocrate_bag_filename) + ) + + # compare object read from the bag and original RO-Crate + expect_equal(basic_crate_from_bag, basic_crate) + + # create invalid bag for testing purposes + dir.create(file.path(tmp_dir, "INVALID/data"), recursive = TRUE, + showWarnings = FALSE) + # create skeleton with empty files + idx <- file.path(tmp_dir, "INVALID", + c("bagit.txt", "manifest-sha512.txt", "tagmanifest-sha512.txt")) |> + file.create(showWarnings = FALSE) + # check invalid RO-Crate bag + expect_error(rocrateR::is_rocrate_bag(file.path(tmp_dir, "INVALID"))) + + # delete temporary directory + unlink(tmp_dir, recursive = TRUE, force = TRUE) + + # check if the temporary directory was successfully deleted + expect_false(dir.exists(tmp_dir)) +}) + +test_that("unbag_rocrate works", { + # create basic RO-Crate + basic_crate <- rocrateR::rocrate() + + # create temporary directory + tmp_dir <- file.path(tempdir(), + paste0("rocrate-tests-", digest::digest(Sys.time()))) + dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) + + # missing path + expect_error(rocrateR::unbag_rocrate()) + + # invalid path + expect_error(rocrateR::unbag_rocrate("/invalid/path")) + + # path to empty directory + expect_error(rocrateR::unbag_rocrate(tmp_dir)) + + # write RO-Crate to temporary file + tmp_file <- file.path(tmp_dir, "ro-crate-metadata.json") + + # check that the temporary file doesn't exist + expect_false(file.exists(tmp_file)) + + # write to temporary file + basic_crate |> + rocrateR::write_rocrate(path = tmp_file) + + # check that the temporary file exists + expect_true(file.exists(tmp_file)) + + # try to unbag non-zipped file + expect_error(rocrateR::unbag_rocrate(file.path(tmp_file))) + + # try to bag RO-Crate overwriting previous one + expect_message( + expect_warning(rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE) + ) + ) + + # check that the RO-Crate bag exists + expect_true(file.exists(rocrate_bag_filename)) + + rocrate_bag_files <- rocrateR::unbag_rocrate(rocrate_bag_filename, + output = tmp_dir) + + # read RO-Crate metadata descriptor file + basic_crate_from_bag <- file.path(rocrate_bag_files, + "data/ro-crate-metadata.json") |> + rocrateR::read_rocrate() + + # compare with the original RO-Crate + expect_equal(basic_crate_from_bag, basic_crate) + + # delete temporary directory + unlink(tmp_dir, recursive = TRUE, force = TRUE) + + # check if the temporary directory was successfully deleted + expect_false(dir.exists(tmp_dir)) +}) \ No newline at end of file From 40bbede61d6bf23c10ec7df749c430f66cade4db Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 21 Oct 2025 15:46:00 +0100 Subject: [PATCH 26/82] Update inspection of @graph entities, so only one entity is processed at the time --- R/utils-rocrate.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/utils-rocrate.R b/R/utils-rocrate.R index 87b8a74..045bcae 100644 --- a/R/utils-rocrate.R +++ b/R/utils-rocrate.R @@ -38,8 +38,10 @@ is_rocrate <- function(rocrate) { unlist() # validate @graph entities - valid_entities <- ro_crate_graph |> - sapply(.validate_entity.list, ent_name = graph_ids) + valid_entities <- seq_along(ro_crate_graph) |> + sapply(function(i) { + .validate_entity.list(ro_crate_graph[[i]], ent_name = graph_ids[i]) + }) # check lengths of @ids and number of entities, must be the same valid_length_graph <- length(graph_ids) == length(valid_entities) From c1fbd7631b10beef94f287738042074302ac4f93 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 21 Oct 2025 15:46:58 +0100 Subject: [PATCH 27/82] Replace message when issues is identified from using a call to stop to a warning call --- R/utils-entity.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/utils-entity.R b/R/utils-entity.R index 58fef6c..95d7eda 100644 --- a/R/utils-entity.R +++ b/R/utils-entity.R @@ -98,7 +98,8 @@ msg <- "" if (!is.null(ent_name)) msg <- paste0("===== Checking: ", ent_name, " =====\n") - msg <- paste0(msg, "Missing: \n", paste0("- ", required[!has_elements], collapse = "\n")) - stop(msg) + msg <- paste0(msg, "Missing: \n", + paste0(" - ", required[!has_elements], collapse = "\n")) + warning(msg, call. = FALSE) } From 196610919cfe7ee85f8fa7c27e2fde6ed7c2798c Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 21 Oct 2025 15:47:54 +0100 Subject: [PATCH 28/82] Add new param output to the bag_rocrate function --- R/utils-bag.R | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index 7bd1f49..55d27c8 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -19,6 +19,8 @@ bag_rocrate <- function(x, ...) { #' @rdname bag_rocrate #' +#' @param output String with path where the RO-Crate bag will be stored +#' (default: `x` - same path as the input value). #' @param force_bag Boolean flag to indicate whether the force the creation of #' a 'bag' even if not all the files were successfully bagged #' (default: `FALSE` ~ check if all the files were copied successfully). @@ -29,7 +31,7 @@ bag_rocrate <- function(x, ...) { #' @returns String with full path to the final RO-Crate bag. #' #' @export -bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") { +bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE, zip_flags = "-r9X") { # check a valid path was given if (!dir.exists(x)) { stop("The given path, `x`, does not exist!\n", @@ -93,7 +95,7 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") bagit_fetch(tmp_dir) # compress bag contents inside original path - output_bag <- file.path(x, paste0(rocrate_id, ".zip")) + output_bag <- file.path(output, paste0(rocrate_id, ".zip")) bag_files <- list.files(dirname(tmp_dir), full.names = TRUE, recursive = TRUE) @@ -115,7 +117,7 @@ bag_rocrate.character <- function(x, ..., force_bag = FALSE, zip_flags = "-r9X") #' file should be overwritten if already inside `path` (default: `FALSE`). #' #' @export -bag_rocrate.rocrate <- function(x, ..., path, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X") { +bag_rocrate.rocrate <- function(x, ..., path, output = path, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X") { # check the `x` object is_rocrate(x) # check a valid path was given @@ -137,12 +139,18 @@ bag_rocrate.rocrate <- function(x, ..., path, overwrite = FALSE, force_bag = FAL write_rocrate(x, file.path(path, "ro-crate-metadata.json")) # call the bag method for the given `path` - bag_rocrate(path, force_bag = force_bag, zip_flags = zip_flags) + bag_rocrate(path, output = output, force_bag = force_bag, zip_flags = zip_flags) } +#' Generate BagIt declaration +#' +#' @param path String with path where the BagIt declaration will be stored. +#' @param version String with BagIt version (default: `"1.0"`)/ +#' #' @keywords internal -bagit_declaration <- function(path) { - declaration_lines <- c("BagIt-version: 1.0", +#' @source https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2 +bagit_declaration <- function(path, version = "1.0") { + declaration_lines <- c(paste0("BagIt-version: ", version), "Tag-File-Character-Encoding: UTF-8") writeLines(declaration_lines, con = file.path(dirname(path), "bagit.txt")) @@ -338,7 +346,7 @@ is_rocrate_bag <- function(path, algo = "sha512", bagit_version = "1.0") { # load the manifest file manifest_filename <- paste0(manifest_suffix, "-", algo, ".txt") bagit_manifest_txt <- file.path(path, manifest_filename) |> - utils::read.table(header = FALSE, sep = " ", col.names = c("checksum", "filename")) + utils::read.table(header = FALSE, col.names = c("checksum", "filename")) # check all the files in the manifest file bagit_manifest_txt_validity <- seq_len(nrow(bagit_manifest_txt)) |> sapply(function(i) { @@ -378,6 +386,11 @@ unbag_rocrate <- function(path, output = dirname(path), quiet = FALSE) { stop("The given `path` does not point to a .zip file!", call. = FALSE) } + # check if the `output` directory exists, if not, then it creates it + if (dir.exists(output)) { + dir.create(output, showWarnings = FALSE, recursive = TRUE) + } + # extract contents inside the `output` path utils::unzip(path, exdir = output) From 6c48263aff756226447890b6daba32a5543557e6 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:25:46 +0100 Subject: [PATCH 29/82] Add new internal function .find_type_index, which can be used to find indices of entities inside an RO-Crate with a particular @type --- R/utils-entity.R | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/R/utils-entity.R b/R/utils-entity.R index 95d7eda..141030b 100644 --- a/R/utils-entity.R +++ b/R/utils-entity.R @@ -47,6 +47,24 @@ # return(idx) } +#' Find `@type` index in RO-Crate +#' +#' Find `@type` index in RO-Crate. Useful to retrieve entities with a particular +#' type in the RO-Crate. +#' +#' @inheritParams add_entity_value +#' +#' @returns Boolean vector with index for entity(ies) with `@type`. +#' @keywords internal +.find_type_index <- function(rocrate, type) { + # check the `rocrate` object + is_rocrate(rocrate) + + # find the index in `@graph` with the matching {type} (at least one entry) + getElement(rocrate, "@graph") |> + sapply(\(x) type %in% getElement(x, "@type")) +} + #' Validate entity #' #' @inheritParams entity From 24389f49a6a235820085fad937c38e671bc6ee08 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:47:21 +0100 Subject: [PATCH 30/82] Add new function get_entity which allows the extraction of a single entity from an RO-Crate object, either by @id, @type or both --- R/entity.R | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/R/entity.R b/R/entity.R index 8ce9503..714403d 100644 --- a/R/entity.R +++ b/R/entity.R @@ -66,7 +66,7 @@ add_entity <- function(rocrate, entity, overwrite = FALSE) { #' pair `{key}`-`{value}` within `@graph`. #' #' @inheritParams is_rocrate -#' @param id String with the ID of the RO-Crate entity within `@graph` +#' @param id String with the ID of the RO-Crate entity within `@graph`. #' @param key String with the `key` of the entity with `id` to be modified. #' @param value String with the `value` for `key`. #' @param overwrite Boolean flag to indicate if the existing value (if any), @@ -160,6 +160,105 @@ entity.default <- function(x, ...) { return(new_entity) } +#' Get entity(ies) +#' +#' @inheritParams is_rocrate +#' @param id String with the ID of the RO-Crate entity within `@graph` +#' (optional if `type` is provided). Alternatively, an entity object / list +#' with `@id` and `@type`. +#' @param type String with the type of the RO-Crate entity(ies) within `@graph` +#' to retrieve (optional if `id` is provided). +#' +#' @returns List with found entity object(s). +#' @export +#' +#' @examples +#' basic_crate <- rocrateR::rocrate() +#' +#' # create entity for an organisation +#' organisation_uol <- rocrateR::entity( +#' x = "https://ror.org/04xs57h96", +#' type = "Organization", +#' name = "University of Liverpool", +#' url = "http://www.liv.ac.uk" +#' ) +#' +#' # create an entity for a person +#' person_rvd <- rocrateR::entity( +#' x = "https://orcid.org/0000-0001-5036-8661", +#' type = "Person", +#' name = "Roberto Villegas-Diaz", +#' affiliation = list(`@id` = organisation_uol$`@id`) +#' ) +#' +#' basic_crate_person <- basic_crate |> +#' rocrateR::add_entity(person_rvd) |> +#' rocrateR::add_entity_value(id = "./", key = "author", value = list(`@id` = person_rvd$`@id`)) |> +#' rocrateR::add_entity(organisation_uol) |> +#' rocrateR::get_entity(person_rvd) +#' +#' basic_crate_person[[1]]$name == person_rvd$name +#' basic_crate_person[[1]]$`@id` == person_rvd$`@id` +get_entity <- function(rocrate, id = NULL, type = NULL) { + # check the `rocrate` object + is_rocrate(rocrate) + + # if `id` is given as an entity object / list, extract @id and @type + if (is.list(id)) { + type <- getElement(id, "@type") + id <- getElement(id, "@id") + } + + # check that either `id` or `type` were provided + if (all(is.null(id), is.null(type))) { + stop("You must provide a value for either `id` or `type`!", + call. = FALSE) + } + + # initialise local variables + idx_by_id <- idx_by_type <- NULL + + # if `id` was provided, then find elements with that @id + if (!is.null(id)) { + idx_by_id <- .find_id_index(rocrate, id) + } + # if `type` was provided, then find elements with that @type + if (!is.null(type)) { + idx_by_type <- .find_type_index(rocrate, type) + } + + # combine (if both id and type were provided) the indices + idx <- NULL + if (!is.null(id) && !is.null(type)) { + idx <- idx_by_id & idx_by_type + } else if (!is.null(id)) { + idx <- idx_by_id + } else if (!is.null(type)) { + idx <- idx_by_type + } + if (sum(idx) > 0) { # at least one entity was found + matching_entities <- rocrate$`@graph`[idx] |> + lapply(function(x) { + class(x) <- unique(c("entity", class(x))) + return(x) + }) + return(matching_entities) + } else { + msg <- "No entities were found with " + msg_id <- paste0("@id = '", id, "'") + msg_type <- paste0("@type = '", type, "'") + warning(msg, + ifelse(is.null(id), "", msg_id), + ifelse(!is.null(id) && !is.null(type), " and ", ""), + ifelse(is.null(type), "", msg_type), + "!", + call. = FALSE) + } + + # return an empty entity, in case no valid entity was found + structure(list(), class = c("entity", "list")) +} + #' Remove entity #' #' @inheritParams is_rocrate From 6ada3ceb854e041b281077817883eebd143cfc32 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:47:53 +0100 Subject: [PATCH 31/82] Add S3 generic method to validate entity object with class entity --- R/utils-entity.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/R/utils-entity.R b/R/utils-entity.R index 141030b..fb9ec72 100644 --- a/R/utils-entity.R +++ b/R/utils-entity.R @@ -86,6 +86,12 @@ .validate_entity_overview(required, ent_name) } +#' @method validate_entity entity +#' @keywords internal +.validate_entity.entity <- function(x, ..., ent_name = NULL, required = c("@id", "@type")) { + NextMethod() +} + #' @method validate_entity list #' @keywords internal .validate_entity.list <- function(x, ..., ent_name = NULL, required = c("@id", "@type")) { From e5e06d689769f31feb05d4093e15cf51f0450289 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:48:18 +0100 Subject: [PATCH 32/82] Add S3 generic method to print objects with entity class --- R/print.R | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/R/print.R b/R/print.R index 34c7573..860c5ae 100644 --- a/R/print.R +++ b/R/print.R @@ -29,3 +29,29 @@ print.rocrate <- function(x, ...) { # return (invisibly) the input object invisible(x) } + +#' Print RO-Crate entity +#' +#' Print RO-Crate entity, S3 method for class 'entity'. +#' +#' @param x RO-Crate entity object, see [rocrateR::entity]. +#' @param ... Optional arguments, not used. +#' +#' @returns Invisibly the input RO-Crate entity, `x`. +#' @export +#' +#' @examples +#' rocrateR::rocrate() |> +#' rocrateR::get_entity("./") +print.entity <- function(x, ...) { + # check the `x` object + .validate_entity(x) + + # display formatted RO-Crate entity + message("RO-Crate entity:", + "\n @id = '", getElement(x, "@id"), "'", + "\n @type = '", getElement(x, "@type"), "'" + ) + # return (invisibly) the input object + invisible(x) +} From 620737a59693a1aacf31e125413020e61440ae44 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:48:54 +0100 Subject: [PATCH 33/82] New build --- NAMESPACE | 2 ++ man/add_entity_value.Rd | 2 +- man/bag_rocrate.Rd | 6 ++++- man/bagit_declaration.Rd | 18 +++++++++---- man/dot-find_id_index.Rd | 2 +- man/dot-find_type_index.Rd | 19 ++++++++++++++ man/get_entity.Rd | 52 ++++++++++++++++++++++++++++++++++++++ man/print.entity.Rd | 23 +++++++++++++++++ man/unbag_rocrate.Rd | 6 ++--- 9 files changed, 119 insertions(+), 11 deletions(-) create mode 100644 man/dot-find_type_index.Rd create mode 100644 man/get_entity.Rd create mode 100644 man/print.entity.Rd diff --git a/NAMESPACE b/NAMESPACE index 1fdc51f..bb11477 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,11 +3,13 @@ S3method(bag_rocrate,character) S3method(bag_rocrate,rocrate) S3method(entity,default) +S3method(print,entity) S3method(print,rocrate) export(add_entity) export(add_entity_value) export(bag_rocrate) export(entity) +export(get_entity) export(is_rocrate) export(is_rocrate_bag) export(read_rocrate) diff --git a/man/add_entity_value.Rd b/man/add_entity_value.Rd index 1033906..172d7a8 100644 --- a/man/add_entity_value.Rd +++ b/man/add_entity_value.Rd @@ -9,7 +9,7 @@ add_entity_value(rocrate, id, key, value, overwrite = TRUE) \arguments{ \item{rocrate}{RO-Crate object, see \link{rocrate}.} -\item{id}{String with the ID of the RO-Crate entity within \verb{@graph}} +\item{id}{String with the ID of the RO-Crate entity within \verb{@graph}.} \item{key}{String with the \code{key} of the entity with \code{id} to be modified.} diff --git a/man/bag_rocrate.Rd b/man/bag_rocrate.Rd index d91f543..0568265 100644 --- a/man/bag_rocrate.Rd +++ b/man/bag_rocrate.Rd @@ -8,12 +8,13 @@ \usage{ bag_rocrate(x, ...) -\method{bag_rocrate}{character}(x, ..., force_bag = FALSE, zip_flags = "-r9X") +\method{bag_rocrate}{character}(x, ..., output = x, force_bag = FALSE, zip_flags = "-r9X") \method{bag_rocrate}{rocrate}( x, ..., path, + output = path, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X" @@ -26,6 +27,9 @@ object with the \link[rocrateR]{rocrate} class.} \item{...}{Additional parameters, see below.} +\item{output}{String with path where the RO-Crate bag will be stored +(default: \code{x} - same path as the input value).} + \item{force_bag}{Boolean flag to indicate whether the force the creation of a 'bag' even if not all the files were successfully bagged (default: \code{FALSE} ~ check if all the files were copied successfully).} diff --git a/man/bagit_declaration.Rd b/man/bagit_declaration.Rd index 38c0473..625429e 100644 --- a/man/bagit_declaration.Rd +++ b/man/bagit_declaration.Rd @@ -1,15 +1,21 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/utils-bag.R -\name{.validate_bagit_declaration} +\name{bagit_declaration} +\alias{bagit_declaration} \alias{.validate_bagit_declaration} -\title{Validate BagIt declaration} +\title{Generate BagIt declaration} +\source{ +https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2 +} \usage{ +bagit_declaration(path, version = "1.0") + .validate_bagit_declaration(path, algo = "sha512", bagit_version = "1.0") } \arguments{ -\item{path}{String with full path to a compressed file contain an RO-Crate -bag, see \link[rocrateR]{bag_rocrate} for details. Alternatively, a path -to a directory containing an RO-Crate bag.} +\item{path}{String with path where the BagIt declaration will be stored.} + +\item{version}{String with BagIt version (default: \code{"1.0"})/} \item{algo}{String with algorithm used to generate the RO-Crate bag (default: \code{"sha512"}). See \link[digest]{digest} for more details.} @@ -22,6 +28,8 @@ See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} A list with \code{status} and \code{errors} identified. } \description{ +Generate BagIt declaration + Validate BagIt declaration } \keyword{internal} diff --git a/man/dot-find_id_index.Rd b/man/dot-find_id_index.Rd index 5149fd4..9c7cd20 100644 --- a/man/dot-find_id_index.Rd +++ b/man/dot-find_id_index.Rd @@ -9,7 +9,7 @@ \arguments{ \item{rocrate}{RO-Crate object, see \link{rocrate}.} -\item{id}{String with the ID of the RO-Crate entity within \verb{@graph}} +\item{id}{String with the ID of the RO-Crate entity within \verb{@graph}.} } \value{ Boolean vector with index for entity with \verb{@id}. diff --git a/man/dot-find_type_index.Rd b/man/dot-find_type_index.Rd new file mode 100644 index 0000000..db047b0 --- /dev/null +++ b/man/dot-find_type_index.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-entity.R +\name{.find_type_index} +\alias{.find_type_index} +\title{Find \verb{@type} index in RO-Crate} +\usage{ +.find_type_index(rocrate, type) +} +\arguments{ +\item{rocrate}{RO-Crate object, see \link{rocrate}.} +} +\value{ +Boolean vector with index for entity(ies) with \verb{@type}. +} +\description{ +Find \verb{@type} index in RO-Crate. Useful to retrieve entities with a particular +type in the RO-Crate. +} +\keyword{internal} diff --git a/man/get_entity.Rd b/man/get_entity.Rd new file mode 100644 index 0000000..6826920 --- /dev/null +++ b/man/get_entity.Rd @@ -0,0 +1,52 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/entity.R +\name{get_entity} +\alias{get_entity} +\title{Get entity(ies)} +\usage{ +get_entity(rocrate, id = NULL, type = NULL) +} +\arguments{ +\item{rocrate}{RO-Crate object, see \link{rocrate}.} + +\item{id}{String with the ID of the RO-Crate entity within \verb{@graph} +(optional if \code{type} is provided). Alternatively, an entity object / list +with \verb{@id} and \verb{@type}.} + +\item{type}{String with the type of the RO-Crate entity(ies) within \verb{@graph} +to retrieve (optional if \code{id} is provided).} +} +\value{ +List with found entity object(s). +} +\description{ +Get entity(ies) +} +\examples{ +basic_crate <- rocrateR::rocrate() + +# create entity for an organisation +organisation_uol <- rocrateR::entity( + x = "https://ror.org/04xs57h96", + type = "Organization", + name = "University of Liverpool", + url = "http://www.liv.ac.uk" +) + +# create an entity for a person +person_rvd <- rocrateR::entity( + x = "https://orcid.org/0000-0001-5036-8661", + type = "Person", + name = "Roberto Villegas-Diaz", + affiliation = list(`@id` = organisation_uol$`@id`) +) + +basic_crate_person <- basic_crate |> + rocrateR::add_entity(person_rvd) |> + rocrateR::add_entity_value(id = "./", key = "author", value = list(`@id` = person_rvd$`@id`)) |> + rocrateR::add_entity(organisation_uol) |> + rocrateR::get_entity(person_rvd) + +basic_crate_person[[1]]$name == person_rvd$name +basic_crate_person[[1]]$`@id` == person_rvd$`@id` +} diff --git a/man/print.entity.Rd b/man/print.entity.Rd new file mode 100644 index 0000000..32e940c --- /dev/null +++ b/man/print.entity.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/print.R +\name{print.entity} +\alias{print.entity} +\title{Print RO-Crate entity} +\usage{ +\method{print}{entity}(x, ...) +} +\arguments{ +\item{x}{RO-Crate entity object, see \link{entity}.} + +\item{...}{Optional arguments, not used.} +} +\value{ +Invisibly the input RO-Crate entity, \code{x}. +} +\description{ +Print RO-Crate entity, S3 method for class 'entity'. +} +\examples{ +rocrateR::rocrate() |> + rocrateR::get_entity("./") +} diff --git a/man/unbag_rocrate.Rd b/man/unbag_rocrate.Rd index 5c8a589..2f0cf9e 100644 --- a/man/unbag_rocrate.Rd +++ b/man/unbag_rocrate.Rd @@ -4,15 +4,15 @@ \alias{unbag_rocrate} \title{'Unbag' (extract) RO-Crate packed with BagIt} \usage{ -unbag_rocrate(path, output = path, quiet = FALSE) +unbag_rocrate(path, output = dirname(path), quiet = FALSE) } \arguments{ \item{path}{String with path to compressed file containing an RO-Crate bag.} \item{output}{String with target path where the contents will be extracted -(default: \code{path} - same path as input).} +(default: \code{dirname(path)} - same directory as input \code{path}).} -\item{quiet}{Boolean flag to indicate if messages should be supressed +\item{quiet}{Boolean flag to indicate if messages should be suppressed (default: \code{FALSE} - display messages).} } \value{ From 283be16ff6ddbdde315324954af0ffa58353bedf Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:49:24 +0100 Subject: [PATCH 34/82] Add minimum version of R as a dependency, v4.1.0, to use the native pipe --- DESCRIPTION | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DESCRIPTION b/DESCRIPTION index 07211ef..aa9b10c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,3 +23,5 @@ Imports: digest, jsonlite, tibble +Depends: + R (>= 4.1.0) From 35aeb62caf6e5a123298c8ccd79ff60704c071e5 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Thu, 23 Oct 2025 15:50:11 +0100 Subject: [PATCH 35/82] Breakdown README section 3 into separate functions to manipulate RO-Crate bags --- README.Rmd | 32 +++++++++++++++++++-- README.md | 83 +++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 98 insertions(+), 17 deletions(-) diff --git a/README.Rmd b/README.Rmd index 00dae08..e1203b2 100644 --- a/README.Rmd +++ b/README.Rmd @@ -141,7 +141,7 @@ For more details, run the following command: ?rocrateR::bag_rocrate ``` ------ +### 3.1. `rocrateR::bag_rocrate()` Here we will create an RO-Crate bag inside temporary directory: @@ -157,6 +157,31 @@ path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) ``` + +### 3.2. `rocrateR::is_rocrate_bag()` + +We can use the function `rocrateR::is_rocrate_bag()` to verify that a given path +points to a ZIP file or a directory with a valid RO-Crate bag. The expected +files are + +- `bagit.txt` with the BagIt [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2](definition) +- `data` directory with [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.1.2](payload) of the RO-Crate +- `manifest-[algorithm].txt` with the checksum for each file inside the `data` directory; . + +```{r} +basic_ro_crate_contents <- path_to_rocrate_bag |> + rocrateR::is_rocrate_bag() +``` + +And then, the RO-Crate can be displayed + +```{r} +print(basic_ro_crate_contents) +``` + + +### 3.3. `rocrateR::unbag_rocrate()` + We can explore the contents of the RO-Crate bag with the following commands: ```{r, echo=FALSE, eval=FALSE} @@ -166,10 +191,11 @@ unzip(path_to_rocrate_bag, list = TRUE) ```{r} # extract files in temporary directory -unzip(path_to_rocrate_bag, exdir = file.path(tmp_dir, "ROC")) +path_to_rocrate_bag_contents <- path_to_rocrate_bag |> + rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) # create tree with the files -fs::dir_tree(file.path(tmp_dir, "ROC")) +fs::dir_tree(path_to_rocrate_bag_contents) ``` ```{r} diff --git a/README.md b/README.md index daecee7..834ae4b 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-16", +#> "datePublished": "2025-10-23", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -110,7 +110,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-16\"," +#> [19] " \"datePublished\": \"2025-10-23\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -192,7 +192,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-16", +#> "datePublished": "2025-10-23", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -243,7 +243,7 @@ For more details, run the following command: ?rocrateR::bag_rocrate ``` ------------------------------------------------------------------------- +### 3.1. `rocrateR::bag_rocrate()` Here we will create an RO-Crate bag inside temporary directory: @@ -258,25 +258,80 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmpt2xmUG/rocrate-547222a530869c27d7caa4da5e83182b/rocrate-93bbbcdcd6d4e38ced4189b1ebe27215.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3fbZMG/rocrate-5430066e0edfce7c352a773154a051dd/rocrate-fa5ac5b0f34edfdbf6fd47bad3fb08de.zip ``` +### 3.2. `rocrateR::is_rocrate_bag()` + +We can use the function `rocrateR::is_rocrate_bag()` to verify that a +given path points to a ZIP file or a directory with a valid RO-Crate +bag. The expected files are + +- `bagit.txt` with the BagIt + [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2](definition) +- `data` directory with + [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.1.2](payload) + of the RO-Crate +- `manifest-[algorithm].txt` with the checksum for each file inside the + `data` directory; . + +``` r +basic_ro_crate_contents <- path_to_rocrate_bag |> + rocrateR::is_rocrate_bag() +#> Valid RO-Crate found! +``` + +And then, the RO-Crate can be displayed + +``` r +print(basic_ro_crate_contents) +#> { +#> "@context": "https://w3id.org/ro/crate/1.2/context", +#> "@graph": [ +#> { +#> "@id": "ro-crate-metadata.json", +#> "@type": "CreativeWork", +#> "about": { +#> "@id": "./" +#> }, +#> "conformsTo": { +#> "@id": "https://w3id.org/ro/crate/1.2" +#> } +#> }, +#> { +#> "@id": "./", +#> "@type": "Dataset", +#> "name": "", +#> "description": "", +#> "datePublished": "2025-10-23", +#> "license": { +#> "@id": "http://spdx.org/licenses/CC-BY-4.0" +#> } +#> } +#> ] +#> } +``` + +### 3.3. `rocrateR::unbag_rocrate()` + We can explore the contents of the RO-Crate bag with the following commands: ``` r # extract files in temporary directory -unzip(path_to_rocrate_bag, exdir = file.path(tmp_dir, "ROC")) +path_to_rocrate_bag_contents <- path_to_rocrate_bag |> + rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) +#> RO-Crate bag successfully extracted! For details, see: +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3fbZMG/rocrate-5430066e0edfce7c352a773154a051dd/ROC # create tree with the files -fs::dir_tree(file.path(tmp_dir, "ROC")) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmpt2xmUG/rocrate-547222a530869c27d7caa4da5e83182b/ROC -#> └── rocrate-93bbbcdcd6d4e38ced4189b1ebe27215 -#> ├── bagit.txt -#> ├── data -#> │ └── ro-crate-metadata.json -#> ├── manifest-sha512.txt -#> └── tagmanifest-sha512.txt +fs::dir_tree(path_to_rocrate_bag_contents) +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3fbZMG/rocrate-5430066e0edfce7c352a773154a051dd/ROC/rocrate-fa5ac5b0f34edfdbf6fd47bad3fb08de +#> ├── bagit.txt +#> ├── data +#> │ └── ro-crate-metadata.json +#> ├── manifest-sha512.txt +#> └── tagmanifest-sha512.txt ``` ``` r From e6872a653025f2b250cc7725bc972956a4962e7c Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 24 Oct 2025 17:43:26 +0100 Subject: [PATCH 36/82] Update read_rocrate and rocrate to assign the class entity when reading and creating an entity for an RO-Crate --- R/rocrate.R | 12 ++++++------ R/utils-json.R | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/R/rocrate.R b/R/rocrate.R index 6b9c51e..a92cc84 100644 --- a/R/rocrate.R +++ b/R/rocrate.R @@ -41,15 +41,15 @@ rocrate <- function(..., new_ro_crate <- list( `@context` = context, `@graph` = list( - list( - `@id` = "ro-crate-metadata.json", - `@type` = "CreativeWork", + rocrateR::entity( + x = "ro-crate-metadata.json", + type = "CreativeWork", about = list(`@id` = "./"), conformsTo = list(`@id` = conformsTo) ), - list( - `@id` = "./", - `@type` = "Dataset", + rocrateR::entity( + x = "./", + type = "Dataset", name = name, description = description, datePublished = as.character(datePublished), diff --git a/R/utils-json.R b/R/utils-json.R index 74f0e17..5c2e57c 100644 --- a/R/utils-json.R +++ b/R/utils-json.R @@ -13,6 +13,10 @@ read_rocrate <- function(path, simplifyVector = FALSE, ...) { rocrate <- jsonlite::read_json(path, simplifyVector = simplifyVector, ...) # assigns it the 'rocrate' class class(rocrate) <- c("rocrate", class(rocrate)) + # assign the entity class to each element in the `@graph` + for (i in seq_along(rocrate$`@graph`)) { + class(rocrate$`@graph`[[i]]) <- c("entity", class(rocrate$`@graph`[[i]])) + } # checks the object has the basic structure of an RO-Crate is_rocrate(rocrate) # returns the new object as an RO-crate From 4f4ce2002107c7a79928e26044daa7c7b058889b Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 24 Oct 2025 17:44:04 +0100 Subject: [PATCH 37/82] Add new test for S3 generic method for print.entity --- tests/testthat/test-print.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/testthat/test-print.R b/tests/testthat/test-print.R index 523c796..7534fd4 100644 --- a/tests/testthat/test-print.R +++ b/tests/testthat/test-print.R @@ -8,3 +8,14 @@ test_that("print.rocrate works", { # test that the contents of the RO-Crate are displayed as message testthat::expect_message(print(basic_crate)) }) + +test_that("print.entity works", { + # create basic RO-Crate entity + basic_entity <- rocrateR::entity("./", type = "Dateset") + # test that the print method returns invisibly an RO-Crate entity + testthat::expect_invisible(print(basic_entity)) + testthat::expect_equal(print(basic_entity), basic_entity) + + # test that the contents of the RO-Crate are displayed as message + testthat::expect_message(print(basic_entity)) +}) From 5887e28922c5d030e2d243e7c0e88f823ffd33d9 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 24 Oct 2025 17:44:23 +0100 Subject: [PATCH 38/82] Update installation instructions --- README.Rmd | 5 +++-- README.md | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/README.Rmd b/README.Rmd index e1203b2..a3aaf74 100644 --- a/README.Rmd +++ b/README.Rmd @@ -28,14 +28,15 @@ The goal of `{rocrateR}` is to provide an R package for creating, manipulating a You can install the released version of `{rocrateR}` from [CRAN](https://cran.r-project.org/package=rocrateR) with: ``` r -install.packages("rocrateR") +# install.packages("pak") +pak::pak("dsROCrate") ``` And the development version from [GitHub](https://github.com/ResearchObject/ro-crate-r/) with: ``` r # install.packages("pak") -pak::pkg_install("ResearchObject/ro-crate-r@dev") +pak::pak("ResearchObject/ro-crate-r@dev") ``` ## 1. First RO-Crate diff --git a/README.md b/README.md index 834ae4b..3e684e7 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ You can install the released version of `{rocrateR}` from [CRAN](https://cran.r-project.org/package=rocrateR) with: ``` r -install.packages("rocrateR") +# install.packages("pak") +pak::pak("dsROCrate") ``` And the development version from @@ -30,7 +31,7 @@ And the development version from ``` r # install.packages("pak") -pak::pkg_install("ResearchObject/ro-crate-r@dev") +pak::pak("ResearchObject/ro-crate-r@dev") ``` ## 1. First RO-Crate @@ -67,7 +68,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-23", +#> "datePublished": "2025-10-24", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -110,7 +111,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-23\"," +#> [19] " \"datePublished\": \"2025-10-24\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -192,7 +193,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-23", +#> "datePublished": "2025-10-24", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -258,7 +259,7 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3fbZMG/rocrate-5430066e0edfce7c352a773154a051dd/rocrate-fa5ac5b0f34edfdbf6fd47bad3fb08de.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp4Hd9uu/rocrate-ba46989af64f46fb63c24acfbff27fcb/rocrate-2abe2afed5da4d58cf88c05e6d367305.zip ``` ### 3.2. `rocrateR::is_rocrate_bag()` @@ -303,7 +304,7 @@ print(basic_ro_crate_contents) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-23", +#> "datePublished": "2025-10-24", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -322,11 +323,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3fbZMG/rocrate-5430066e0edfce7c352a773154a051dd/ROC +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp4Hd9uu/rocrate-ba46989af64f46fb63c24acfbff27fcb/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3fbZMG/rocrate-5430066e0edfce7c352a773154a051dd/ROC/rocrate-fa5ac5b0f34edfdbf6fd47bad3fb08de +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp4Hd9uu/rocrate-ba46989af64f46fb63c24acfbff27fcb/ROC/rocrate-2abe2afed5da4d58cf88c05e6d367305 #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json From 32a3811798e053ad7fe5a30fbc7c376273ab4d06 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 24 Oct 2025 17:44:41 +0100 Subject: [PATCH 39/82] Add new test for the get_entity function --- tests/testthat/test-entity.R | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-entity.R b/tests/testthat/test-entity.R index 2e80d30..68fd620 100644 --- a/tests/testthat/test-entity.R +++ b/tests/testthat/test-entity.R @@ -33,7 +33,7 @@ test_that("entity works", { person_rvd) # invalid entity, missing type - expect_error({ + expect_warning({ rocrateR::entity( x = "https://orcid.org/0000-0001-5036-8661", name = "Roberto Villegas-Diaz", @@ -74,6 +74,40 @@ test_that("add_entity_value works", { }) }) +test_that("get_entity works", { + # call without `id` and `type` + expect_error(rocrateR::get_entity(basic_crate)) + + # call with invalid `id` + expect_warning(rocrateR::get_entity(basic_crate, id = "cool_id")) + + # call with invalid `type` + expect_warning(rocrateR::get_entity(basic_crate, type = "cool_type")) + + # call with valid `id` + res_val_id <- rocrateR::get_entity(basic_crate, id = "./") + expect_equal(length(res_val_id), 1) + expect_equal(class(res_val_id[[1]]), c("entity", "list")) + + # call with valid `type` + res_val_type <- rocrateR::get_entity(basic_crate, type = "Dataset") + expect_equal(length(res_val_type), 1) + expect_equal(class(res_val_type[[1]]), c("entity", "list")) + + # call with valid `id` and `type` + res_val_id_type <- rocrateR::get_entity(basic_crate, + id = "./", + type = "Dataset") + expect_equal(length(res_val_id_type), 1) + expect_equal(class(res_val_id_type[[1]]), c("entity", "list")) + + # call with `entity` object + res_val_entity <- basic_crate |> + rocrateR::get_entity(rocrateR::entity("./", type = "Dataset")) + expect_equal(length(res_val_entity), 1) + expect_equal(class(res_val_entity[[1]]), c("entity", "list")) +}) + test_that("remove_entity works", { # attempt adding and removing the same entity using entity object expect_equal( From 2112c1029494e591d19d16238a9dcb2eef40a80e Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 24 Oct 2025 17:46:17 +0100 Subject: [PATCH 40/82] Update expectation for tests and add new test for testing invalid @graph section --- tests/testthat/test-utils-entity.R | 2 +- tests/testthat/test-utils-rocrate.R | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/tests/testthat/test-utils-entity.R b/tests/testthat/test-utils-entity.R index 1530bf9..fd33d95 100644 --- a/tests/testthat/test-utils-entity.R +++ b/tests/testthat/test-utils-entity.R @@ -9,5 +9,5 @@ test_that(".validate_entity works", { # create RO-Crate with entity missing @type incomplete_entity <- list(`@id` = 123456) - expect_error(rocrateR::rocrate(incomplete_entity)) + expect_warning(rocrateR::rocrate(incomplete_entity)) }) diff --git a/tests/testthat/test-utils-rocrate.R b/tests/testthat/test-utils-rocrate.R index 398c9b2..39e1e1d 100644 --- a/tests/testthat/test-utils-rocrate.R +++ b/tests/testthat/test-utils-rocrate.R @@ -25,11 +25,23 @@ test_that("is_rocrate works", { # modify entity to remove @type basic_crate$`@graph`[[1]]$`@type` <- NULL - expect_error(basic_crate |> - rocrateR::is_rocrate()) + expect_warning(basic_crate |> rocrateR::is_rocrate()) # set invalid context value basic_crate$`@context` <- "My awesome, but non-standard context" - expect_error(basic_crate |> - rocrateR::is_rocrate()) + expect_error( + expect_warning( + basic_crate |> rocrateR::is_rocrate() + ) + ) + + # drop @graph from a valid RO-Crate + basic_crate_v4 <- rocrateR::rocrate() + basic_crate_v4$`@graph` <- NULL + expect_error(rocrateR::is_rocrate(basic_crate_v4)) + + # drop @type from one of the entities + basic_crate_v5 <- rocrateR::rocrate() + basic_crate_v5$`@graph`[[2]]$`@type` <- NULL + expect_warning(rocrateR::is_rocrate(basic_crate_v5)) }) From fc0bb06d06fcd4c3cf09d57eb4116a31d395c22a Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 27 Oct 2025 14:54:19 +0000 Subject: [PATCH 41/82] Add wrapper function for add_entity, which can be used to add multiple entities to an RO-Crate, add_entities --- R/entity.R | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/R/entity.R b/R/entity.R index 714403d..fe4409f 100644 --- a/R/entity.R +++ b/R/entity.R @@ -112,6 +112,35 @@ add_entity_value <- function(rocrate, id, key, value, overwrite = TRUE) { return(rocrate) } +#' Wrapper for \link[rocrateR]{add_entity} +#' +#' Wrapper for \link[rocrateR]{add_entity}, can be use to add multiple entities. +#' +#' @inheritParams add_entity +#' @param entity List with entity objects. +#' @param quiet Boolean flag to indicate if status messages should be hidden +#' (default: `FALSE`). +#' +#' @returns Updated RO-Crate with the new entities. +#' @export +add_entities <- function(rocrate, entity, overwrite = FALSE, quiet = FALSE) { + for (i in seq_along(entity)) { + if (!quiet) { + # extract entity @id, if missing, then use index, `i` + ent_id <- getElement(entity[[i]], "@id") + ent_id <- ifelse(is.null(ent_id), + paste0("with index=", i), + paste0("with @id='", ent_id, "'") + ) + message("Adding entity ", ent_id, "...\n") + } + # call the add_entity function + rocrate <- rocrate |> + rocrateR::add_entity(entity[[i]], overwrite = overwrite) + } + return(rocrate) +} + #' Create a data entity #' #' @param x New entity. If a single value (e.g., `character`, `numeric`) is From 0ebb41b87f2ee05bda1ec8869f5f044c0709893b Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 27 Oct 2025 15:07:13 +0000 Subject: [PATCH 42/82] Add wrapper function for the remove_entity function, this one allows to remove multiple entities at once, remove_entities --- R/entity.R | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/R/entity.R b/R/entity.R index fe4409f..7b25074 100644 --- a/R/entity.R +++ b/R/entity.R @@ -344,3 +344,21 @@ remove_entity <- function(rocrate, entity) { return(rocrate) } + +#' Wrapper for \link[rocrateR]{remove_entity} +#' +#' Wrapper for \link[rocrateR]{remove_entity}, can be use to remove multiple +#' entities. +#' +#' @inheritParams remove_entity +#' +#' @returns Updated RO-Crate. +#' @export +remove_entities <- function(rocrate, entity) { + for (i in seq_along(entity)) { + # call the add_entity function + rocrate <- rocrate |> + rocrateR::remove_entity(entity[[i]]) + } + return(rocrate) +} From 2907aaf5bdd00fd50f3966f99c51ff8922886968 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 27 Oct 2025 15:08:00 +0000 Subject: [PATCH 43/82] New build --- NAMESPACE | 2 ++ man/add_entities.Rd | 25 +++++++++++++++++++++++++ man/remove_entities.Rd | 21 +++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 man/add_entities.Rd create mode 100644 man/remove_entities.Rd diff --git a/NAMESPACE b/NAMESPACE index bb11477..da7def1 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,6 +5,7 @@ S3method(bag_rocrate,rocrate) S3method(entity,default) S3method(print,entity) S3method(print,rocrate) +export(add_entities) export(add_entity) export(add_entity_value) export(bag_rocrate) @@ -13,6 +14,7 @@ export(get_entity) export(is_rocrate) export(is_rocrate_bag) export(read_rocrate) +export(remove_entities) export(remove_entity) export(rocrate) export(rocrate_5s) diff --git a/man/add_entities.Rd b/man/add_entities.Rd new file mode 100644 index 0000000..f8ed55d --- /dev/null +++ b/man/add_entities.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/entity.R +\name{add_entities} +\alias{add_entities} +\title{Wrapper for \link[rocrateR]{add_entity}} +\usage{ +add_entities(rocrate, entity, overwrite = FALSE, quiet = FALSE) +} +\arguments{ +\item{rocrate}{RO-Crate object, see \link{rocrate}.} + +\item{entity}{List with entity objects.} + +\item{overwrite}{Boolean flag to indicate if the entity (if found in the +given RO-Crate) should be overwritten.} + +\item{quiet}{Boolean flag to indicate if status messages should be hidden +(default: \code{FALSE}).} +} +\value{ +Updated RO-Crate with the new entities. +} +\description{ +Wrapper for \link[rocrateR]{add_entity}, can be use to add multiple entities. +} diff --git a/man/remove_entities.Rd b/man/remove_entities.Rd new file mode 100644 index 0000000..b8d0a3c --- /dev/null +++ b/man/remove_entities.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/entity.R +\name{remove_entities} +\alias{remove_entities} +\title{Wrapper for \link[rocrateR]{remove_entity}} +\usage{ +remove_entities(rocrate, entity) +} +\arguments{ +\item{rocrate}{RO-Crate object, see \link{rocrate}.} + +\item{entity}{Entity object (list) that contains at least the following +components: \verb{@id} and \verb{@type}. Or, scalar value with entity \verb{@id}.} +} +\value{ +Updated RO-Crate. +} +\description{ +Wrapper for \link[rocrateR]{remove_entity}, can be use to remove multiple +entities. +} From 272e9fc0293f66ded9b6fc240f895026f43fd253 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 27 Oct 2025 16:21:41 +0000 Subject: [PATCH 44/82] Add new section with wrangling of RO-Crates --- README.Rmd | 100 ++++++++++++++++++++-- README.md | 240 +++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 317 insertions(+), 23 deletions(-) diff --git a/README.Rmd b/README.Rmd index a3aaf74..720dd85 100644 --- a/README.Rmd +++ b/README.Rmd @@ -123,8 +123,91 @@ my_second_ro_crate <- rocrateR::rocrate(person_rvd, organisation_uol) |> ```{r} print(my_second_ro_crate) ``` +## 3. Wrangle RO-Crate +Previously, we covered how to include additional entities, other valid +operations are to extract (`rocrateR::get_entity()`) and remove +(`rocrateR::remove_entities()`). -## 3. Create an RO-Crate Bag +### 3.1. Set up + +```{r} +# create basic RO-Crate +basic_ro_crate <- rocrateR::rocrate() + +# create some entities for a project and datasets +dataset_entities <- seq_len(5) |> + lapply(\(x) rocrateR::entity(x, type = "Dataset", name = paste0("Data ", x))) +project_entity <- rocrateR::entity( + "#proj101", + type = "Project", + name = "Project 101", + hasPart = dataset_entities |> + lapply(\(x) list(`@id` = x[["@id"]])) + ) + +# add project and entities to the RO-Crate +basic_ro_crate <- basic_ro_crate |> + rocrateR::add_entity(project_entity) |> + # note that here we are using `rocrateR::add_entities` and `rocrateR::add_entity` + rocrateR::add_entities(dataset_entities) + +print(basic_ro_crate) +``` + +### 3.2. Extract entity + +We can extract entities via the `@id`, `@type` or both: + +#### 3.2.1. Extract using `@id` + +```{r} +basic_ro_crate_project <- basic_ro_crate |> + rocrateR::get_entity(id = "#proj101") + +print(basic_ro_crate_project) +``` + +#### 3.2.2. Extract using `@type` + +```{r} +basic_ro_crate_datasets <- basic_ro_crate |> + rocrateR::get_entity(type = "Dataset") + +print(basic_ro_crate_datasets) +``` + +#### 3.2.3. Extract using `@id` and `@type` + +```{r} +basic_ro_crate_dataset_root <- basic_ro_crate |> + rocrateR::get_entity(id = "./", type = "Dataset") + +print(basic_ro_crate_dataset_root) +``` + +### 3.3. Remove entity + +Similarly, we can remove entities from an RO-Crate: + +#### 3.3.1. Remove using scalar `@id` +```{r} +basic_ro_crate_alt <- basic_ro_crate |> + rocrateR::remove_entity("#proj101") +``` + +#### 3.3.2. Remove using `entity` object +```{r} +basic_ro_crate_alt <- basic_ro_crate |> + rocrateR::remove_entity(project_entity) +``` + +#### 3.3.3. Remove multiple entities +```{r} +basic_ro_crate_alt <- basic_ro_crate |> + rocrateR::remove_entities(dataset_entities) +``` + +## 4. Create an RO-Crate Bag Here we will explore the BagIt file packaging format, which is the recommended to use for _bagging_ RO-Crates. BagIt is described in [RFC 8493](https://tools.ietf.org/html/rfc8493): @@ -142,11 +225,12 @@ For more details, run the following command: ?rocrateR::bag_rocrate ``` -### 3.1. `rocrateR::bag_rocrate()` +### 4.1. `rocrateR::bag_rocrate()` Here we will create an RO-Crate bag inside temporary directory: ```{r} +# create basic RO-Crate basic_ro_crate <- rocrateR::rocrate() # create temporary directory @@ -159,7 +243,7 @@ path_to_rocrate_bag <- basic_ro_crate |> ``` -### 3.2. `rocrateR::is_rocrate_bag()` +### 4.2. `rocrateR::is_rocrate_bag()` We can use the function `rocrateR::is_rocrate_bag()` to verify that a given path points to a ZIP file or a directory with a valid RO-Crate bag. The expected @@ -181,7 +265,7 @@ print(basic_ro_crate_contents) ``` -### 3.3. `rocrateR::unbag_rocrate()` +### 4.3. `rocrateR::unbag_rocrate()` We can explore the contents of the RO-Crate bag with the following commands: @@ -205,24 +289,24 @@ unlink(tmp_dir, recursive = TRUE, force = TRUE) ``` -## 4. Validation (experimental) +## 5. Validation (experimental) As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at https://www.researchobject.org/ro-crate/tools), here we will explore the Python package [`rocrate-validator`](https://github.com/crs4/rocrate-validator). For installation details, please visit https://github.com/crs4/rocrate-validator. Note that we will rely on [`{reticulate}`](https://cran.r-project.org/package=reticulate) to install and execute the validator within R: -### 4.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +### 5.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) ``` r pak::pkg_install("reticulate") ``` -### 4.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) +### 5.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) ``` r reticulate::py_install("roc-validator", env = "rocrateR") ``` -### 4.3. Create example RO-Crate and validate it +### 5.3. Create example RO-Crate and validate it ```{r} basic_ro_crate <- rocrateR::rocrate() diff --git a/README.md b/README.md index 3e684e7..e6d44c4 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-24", +#> "datePublished": "2025-10-27", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -111,7 +111,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-24\"," +#> [19] " \"datePublished\": \"2025-10-27\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -193,7 +193,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-24", +#> "datePublished": "2025-10-27", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -219,7 +219,216 @@ print(my_second_ro_crate) #> } ``` -## 3. Create an RO-Crate Bag +## 3. Wrangle RO-Crate + +Previously, we covered how to include additional entities, other valid +operations are to extract (`rocrateR::get_entity()`) and remove +(`rocrateR::remove_entities()`). + +### 3.1. Set up + +``` r +# create basic RO-Crate +basic_ro_crate <- rocrateR::rocrate() + +# create some entities for a project and datasets +dataset_entities <- seq_len(5) |> + lapply(\(x) rocrateR::entity(x, type = "Dataset", name = paste0("Data ", x))) +project_entity <- rocrateR::entity( + "#proj101", + type = "Project", + name = "Project 101", + hasPart = dataset_entities |> + lapply(\(x) list(`@id` = x[["@id"]])) + ) + +# add project and entities to the RO-Crate +basic_ro_crate <- basic_ro_crate |> + rocrateR::add_entity(project_entity) |> + # note that here we are using `rocrateR::add_entities` and `rocrateR::add_entity` + rocrateR::add_entities(dataset_entities) +#> Adding entity with @id='1'... +#> Adding entity with @id='2'... +#> Adding entity with @id='3'... +#> Adding entity with @id='4'... +#> Adding entity with @id='5'... + +print(basic_ro_crate) +#> { +#> "@context": "https://w3id.org/ro/crate/1.2/context", +#> "@graph": [ +#> { +#> "@id": "ro-crate-metadata.json", +#> "@type": "CreativeWork", +#> "about": { +#> "@id": "./" +#> }, +#> "conformsTo": { +#> "@id": "https://w3id.org/ro/crate/1.2" +#> } +#> }, +#> { +#> "@id": "./", +#> "@type": "Dataset", +#> "name": "", +#> "description": "", +#> "datePublished": "2025-10-27", +#> "license": { +#> "@id": "http://spdx.org/licenses/CC-BY-4.0" +#> } +#> }, +#> { +#> "@id": "#proj101", +#> "@type": "Project", +#> "name": "Project 101", +#> "hasPart": [ +#> { +#> "@id": 1 +#> }, +#> { +#> "@id": 2 +#> }, +#> { +#> "@id": 3 +#> }, +#> { +#> "@id": 4 +#> }, +#> { +#> "@id": 5 +#> } +#> ] +#> }, +#> { +#> "@id": 1, +#> "@type": "Dataset", +#> "name": "Data 1" +#> }, +#> { +#> "@id": 2, +#> "@type": "Dataset", +#> "name": "Data 2" +#> }, +#> { +#> "@id": 3, +#> "@type": "Dataset", +#> "name": "Data 3" +#> }, +#> { +#> "@id": 4, +#> "@type": "Dataset", +#> "name": "Data 4" +#> }, +#> { +#> "@id": 5, +#> "@type": "Dataset", +#> "name": "Data 5" +#> } +#> ] +#> } +``` + +### 3.2. Extract entity + +We can extract entities via the `@id`, `@type` or both: + +#### 3.2.1. Extract using `@id` + +``` r +basic_ro_crate_project <- basic_ro_crate |> + rocrateR::get_entity(id = "#proj101") + +print(basic_ro_crate_project) +#> [[1]] +#> RO-Crate entity: +#> @id = '#proj101' +#> @type = 'Project' +``` + +#### 3.2.2. Extract using `@type` + +``` r +basic_ro_crate_datasets <- basic_ro_crate |> + rocrateR::get_entity(type = "Dataset") + +print(basic_ro_crate_datasets) +#> [[1]] +#> RO-Crate entity: +#> @id = './' +#> @type = 'Dataset' +#> +#> [[2]] +#> RO-Crate entity: +#> @id = '1' +#> @type = 'Dataset' +#> +#> [[3]] +#> RO-Crate entity: +#> @id = '2' +#> @type = 'Dataset' +#> +#> [[4]] +#> RO-Crate entity: +#> @id = '3' +#> @type = 'Dataset' +#> +#> [[5]] +#> RO-Crate entity: +#> @id = '4' +#> @type = 'Dataset' +#> +#> [[6]] +#> RO-Crate entity: +#> @id = '5' +#> @type = 'Dataset' +``` + +#### 3.2.3. Extract using `@id` and `@type` + +``` r +basic_ro_crate_dataset_root <- basic_ro_crate |> + rocrateR::get_entity(id = "./", type = "Dataset") + +print(basic_ro_crate_dataset_root) +#> [[1]] +#> RO-Crate entity: +#> @id = './' +#> @type = 'Dataset' +``` + +### 3.3. Remove entity + +Similarly, we can remove entities from an RO-Crate: + +#### 3.3.1. Remove using scalar `@id` + +``` r +basic_ro_crate_alt <- basic_ro_crate |> + rocrateR::remove_entity("#proj101") +#> Removing the entity with @id = '#proj101'. +``` + +#### 3.3.2. Remove using `entity` object + +``` r +basic_ro_crate_alt <- basic_ro_crate |> + rocrateR::remove_entity(project_entity) +#> Removing the entity with @id = '#proj101'. +``` + +#### 3.3.3. Remove multiple entities + +``` r +basic_ro_crate_alt <- basic_ro_crate |> + rocrateR::remove_entities(dataset_entities) +#> Removing the entity with @id = '1'. +#> Removing the entity with @id = '2'. +#> Removing the entity with @id = '3'. +#> Removing the entity with @id = '4'. +#> Removing the entity with @id = '5'. +``` + +## 4. Create an RO-Crate Bag Here we will explore the BagIt file packaging format, which is the recommended to use for *bagging* RO-Crates. BagIt is described in [RFC @@ -244,11 +453,12 @@ For more details, run the following command: ?rocrateR::bag_rocrate ``` -### 3.1. `rocrateR::bag_rocrate()` +### 4.1. `rocrateR::bag_rocrate()` Here we will create an RO-Crate bag inside temporary directory: ``` r +# create basic RO-Crate basic_ro_crate <- rocrateR::rocrate() # create temporary directory @@ -259,10 +469,10 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp4Hd9uu/rocrate-ba46989af64f46fb63c24acfbff27fcb/rocrate-2abe2afed5da4d58cf88c05e6d367305.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3lnH4A/rocrate-c13e5e298979aa6eced8bd5e6d84d3c4/rocrate-92cb32e017ce9694ca07225268e98416.zip ``` -### 3.2. `rocrateR::is_rocrate_bag()` +### 4.2. `rocrateR::is_rocrate_bag()` We can use the function `rocrateR::is_rocrate_bag()` to verify that a given path points to a ZIP file or a directory with a valid RO-Crate @@ -304,7 +514,7 @@ print(basic_ro_crate_contents) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-24", +#> "datePublished": "2025-10-27", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -313,7 +523,7 @@ print(basic_ro_crate_contents) #> } ``` -### 3.3. `rocrateR::unbag_rocrate()` +### 4.3. `rocrateR::unbag_rocrate()` We can explore the contents of the RO-Crate bag with the following commands: @@ -323,11 +533,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp4Hd9uu/rocrate-ba46989af64f46fb63c24acfbff27fcb/ROC +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3lnH4A/rocrate-c13e5e298979aa6eced8bd5e6d84d3c4/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp4Hd9uu/rocrate-ba46989af64f46fb63c24acfbff27fcb/ROC/rocrate-2abe2afed5da4d58cf88c05e6d367305 +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3lnH4A/rocrate-c13e5e298979aa6eced8bd5e6d84d3c4/ROC/rocrate-92cb32e017ce9694ca07225268e98416 #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json @@ -340,7 +550,7 @@ fs::dir_tree(path_to_rocrate_bag_contents) unlink(tmp_dir, recursive = TRUE, force = TRUE) ``` -## 4. Validation (experimental) +## 5. Validation (experimental) As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at @@ -354,19 +564,19 @@ Note that we will rely on [`{reticulate}`](https://cran.r-project.org/package=reticulate) to install and execute the validator within R: -### 4.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +### 5.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) ``` r pak::pkg_install("reticulate") ``` -### 4.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) +### 5.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) ``` r reticulate::py_install("roc-validator", env = "rocrateR") ``` -### 4.3. Create example RO-Crate and validate it +### 5.3. Create example RO-Crate and validate it ``` r basic_ro_crate <- rocrateR::rocrate() From fac9c84eeb0ffb5daf15d8b5e6a0325b616ce96f Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 27 Oct 2025 16:33:20 +0000 Subject: [PATCH 45/82] Add new tests for add_entities and remove_entities --- tests/testthat/test-entity.R | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tests/testthat/test-entity.R b/tests/testthat/test-entity.R index 68fd620..0b18e06 100644 --- a/tests/testthat/test-entity.R +++ b/tests/testthat/test-entity.R @@ -74,6 +74,34 @@ test_that("add_entity_value works", { }) }) +test_that("add_entities works", { + # attempt adding same entity without `overwrite = TRUE` + expect_error({ + basic_crate |> + rocrateR::add_entity(person_rvd) |> + rocrateR::add_entities(list(person_rvd)) + }) + + # set `overwrite = TRUE` + expect_warning({ + basic_crate |> + rocrateR::add_entity(person_rvd) |> + rocrateR::add_entities(list(person_rvd), overwrite = TRUE) + }) + + # expect message + expect_message({ + basic_crate |> + rocrateR::add_entities(list(person_rvd)) + }) + + # supress messages + expect_no_message({ + basic_crate |> + rocrateR::add_entities(list(person_rvd), quiet = TRUE) + }) +}) + test_that("get_entity works", { # call without `id` and `type` expect_error(rocrateR::get_entity(basic_crate)) @@ -132,3 +160,26 @@ test_that("remove_entity works", { }) }) +test_that("remove_entities works", { + # attempt adding and removing the same entity using entity object + expect_equal( + basic_crate |> + rocrateR::add_entity(person_rvd) |> + rocrateR::remove_entities(list(person_rvd)), + basic_crate + ) + + # attempt adding and removing the same entity using @id + expect_equal( + basic_crate |> + rocrateR::add_entity(person_rvd) |> + rocrateR::remove_entities(list("https://orcid.org/0000-0001-5036-8661")), + basic_crate + ) + + # attempt removing non-existing entity + expect_warning({ + basic_crate |> + rocrateR::remove_entities(list("https://orcid.org/0000-0001-5036-8661")) + }) +}) From 175b10150858f76586092c0edd34a9ddf1f8736d Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 09:24:52 +0000 Subject: [PATCH 46/82] Include new test to increase code coverage --- tests/testthat/test-utils-bag.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-utils-bag.R b/tests/testthat/test-utils-bag.R index 638a549..993a604 100644 --- a/tests/testthat/test-utils-bag.R +++ b/tests/testthat/test-utils-bag.R @@ -12,6 +12,7 @@ test_that("bag_rocrate works", { # use invalid path expect_error(rocrateR::bag_rocrate(basic_crate, path = "/invalid/path")) + expect_error(rocrateR::bag_rocrate("/invalid/path")) # write RO-Crate to temporary file tmp_file <- file.path(tmp_dir, "ro-crate-metadata.json") @@ -33,7 +34,7 @@ test_that("bag_rocrate works", { expect_warning(rocrate_bag_filename <- basic_crate |> rocrateR::bag_rocrate(path = tmp_dir, overwrite = TRUE, - force_bag = FALSE)) + force_bag = TRUE)) # check that the RO-Crate bag exists expect_true(file.exists(rocrate_bag_filename)) From 16b76c88f3c191eef9132702e96e8934ddfede83 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 09:25:25 +0000 Subject: [PATCH 47/82] Update usage of force_bag to ignore checking if all files were copied into the RO-Crate bag --- R/utils-bag.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index 55d27c8..d32bc37 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -68,15 +68,15 @@ bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE, zip_fla }) # check that all the files were copied, unless force_bag = TRUE - if (!all(rocrate_files_status)) { - if (!force) { + if (!all(rocrate_files_status) || force_bag) { + if (!force_bag) { stop("It was not possible to bag all your files!\nMissing file(s):\n", paste0(" - ", rocrate_files[!rocrate_files_status], collapse = "\n"), "\n\nTo ignore this check, set `force_bag = TRUE`.", call. = FALSE) } else { warning("Forcing the creation of the RO-Crate bag! ", - "Not all the files were copied: \n", - paste0("- ", rocrate_files[!rocrate_files_status], "\n"), + "Note that this will ignore checking if all files were copied", + "into the RO-Crate bag", call. = FALSE) } } From 7a812ecf77ed0803dbf85fcd8b06b10a17009e77 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 12:47:59 +0000 Subject: [PATCH 48/82] Add GHA for R-hub checks --- .github/workflows/rhub.yaml | 95 +++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 .github/workflows/rhub.yaml diff --git a/.github/workflows/rhub.yaml b/.github/workflows/rhub.yaml new file mode 100644 index 0000000..74ec7b0 --- /dev/null +++ b/.github/workflows/rhub.yaml @@ -0,0 +1,95 @@ +# R-hub's generic GitHub Actions workflow file. It's canonical location is at +# https://github.com/r-hub/actions/blob/v1/workflows/rhub.yaml +# You can update this file to a newer version using the rhub2 package: +# +# rhub::rhub_setup() +# +# It is unlikely that you need to modify this file manually. + +name: R-hub +run-name: "${{ github.event.inputs.id }}: ${{ github.event.inputs.name || format('Manually run by {0}', github.triggering_actor) }}" + +on: + workflow_dispatch: + inputs: + config: + description: 'A comma separated list of R-hub platforms to use.' + type: string + default: 'linux,windows,macos' + name: + description: 'Run name. You can leave this empty now.' + type: string + id: + description: 'Unique ID. You can leave this empty now.' + type: string + +jobs: + + setup: + runs-on: ubuntu-latest + outputs: + containers: ${{ steps.rhub-setup.outputs.containers }} + platforms: ${{ steps.rhub-setup.outputs.platforms }} + + steps: + # NO NEED TO CHECKOUT HERE + - uses: r-hub/actions/setup@v1 + with: + config: ${{ github.event.inputs.config }} + id: rhub-setup + + linux-containers: + needs: setup + if: ${{ needs.setup.outputs.containers != '[]' }} + runs-on: ubuntu-latest + name: ${{ matrix.config.label }} + strategy: + fail-fast: false + matrix: + config: ${{ fromJson(needs.setup.outputs.containers) }} + container: + image: ${{ matrix.config.container }} + + steps: + - uses: r-hub/actions/checkout@v1 + - uses: r-hub/actions/platform-info@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + - uses: r-hub/actions/setup-deps@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + - uses: r-hub/actions/run-check@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + + other-platforms: + needs: setup + if: ${{ needs.setup.outputs.platforms != '[]' }} + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.label }} + strategy: + fail-fast: false + matrix: + config: ${{ fromJson(needs.setup.outputs.platforms) }} + + steps: + - uses: r-hub/actions/checkout@v1 + - uses: r-hub/actions/setup-r@v1 + with: + job-config: ${{ matrix.config.job-config }} + token: ${{ secrets.RHUB_TOKEN }} + - uses: r-hub/actions/platform-info@v1 + with: + token: ${{ secrets.RHUB_TOKEN }} + job-config: ${{ matrix.config.job-config }} + - uses: r-hub/actions/setup-deps@v1 + with: + job-config: ${{ matrix.config.job-config }} + token: ${{ secrets.RHUB_TOKEN }} + - uses: r-hub/actions/run-check@v1 + with: + job-config: ${{ matrix.config.job-config }} + token: ${{ secrets.RHUB_TOKEN }} From ab772325e3654e49710b0af1f037bef0d110d8ae Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 12:48:22 +0000 Subject: [PATCH 49/82] Update tests and add new ones to increase code coverage --- tests/testthat/test-utils-bag.R | 35 +++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/tests/testthat/test-utils-bag.R b/tests/testthat/test-utils-bag.R index 993a604..05b28a6 100644 --- a/tests/testthat/test-utils-bag.R +++ b/tests/testthat/test-utils-bag.R @@ -31,10 +31,14 @@ test_that("bag_rocrate works", { expect_error(rocrateR::bag_rocrate(basic_crate, path = tmp_dir)) # force creation of bag - expect_warning(rocrate_bag_filename <- basic_crate |> - rocrateR::bag_rocrate(path = tmp_dir, - overwrite = TRUE, - force_bag = TRUE)) + expect_warning( # warning because force_bag = TRUE + expect_warning( # warning because overwrite = TRUE + rocrate_bag_filename <- basic_crate |> + rocrateR::bag_rocrate(path = tmp_dir, + overwrite = TRUE, + force_bag = TRUE) + ) + ) # check that the RO-Crate bag exists expect_true(file.exists(rocrate_bag_filename)) @@ -133,6 +137,18 @@ test_that("is_rocrate_bag works", { # compare object read from the bag and original RO-Crate expect_equal(basic_crate_from_bag, basic_crate) + # extract RO-Crate bag + expect_message( + rocrate_bag_contents <- rocrateR::unbag_rocrate(rocrate_bag_filename) + ) + # delete the tagmanifest file and validate RO-Crate bag + expect_true(file.exists(file.path(rocrate_bag_contents, "tagmanifest-sha512.txt"))) + unlink(file.path(rocrate_bag_contents, "tagmanifest-sha512.txt")) + expect_false(file.exists(file.path(rocrate_bag_contents, "tagmanifest-sha512.txt"))) + expect_message( + basic_crate_from_bag <- rocrateR::is_rocrate_bag(rocrate_bag_contents) + ) + # create invalid bag for testing purposes dir.create(file.path(tmp_dir, "INVALID/data"), recursive = TRUE, showWarnings = FALSE) @@ -140,6 +156,17 @@ test_that("is_rocrate_bag works", { idx <- file.path(tmp_dir, "INVALID", c("bagit.txt", "manifest-sha512.txt", "tagmanifest-sha512.txt")) |> file.create(showWarnings = FALSE) + # create data dir + dir.create(file.path(tmp_dir, "INVALID/data"), + showWarnings = FALSE, + recursive = TRUE) + idx <- file.path(tmp_dir, "INVALID/data/ro-crate-metadata.json") |> + file.create(showWarnings = FALSE) + # populate invalid manifest and tagmanifest files + writeLines("1234 data/ro-crate-metadata.json", + file.path(tmp_dir, "INVALID/manifest-sha512.txt")) + writeLines("1234 bagit.txt", + file.path(tmp_dir, "INVALID/tagmanifest-sha512.txt")) # check invalid RO-Crate bag expect_error(rocrateR::is_rocrate_bag(file.path(tmp_dir, "INVALID"))) From 72a55cef8bcaec17be7513de6e47dd56605ebd98 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 13:17:55 +0000 Subject: [PATCH 50/82] Add missing return --- R/utils-entity.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/utils-entity.R b/R/utils-entity.R index fb9ec72..ac19250 100644 --- a/R/utils-entity.R +++ b/R/utils-entity.R @@ -125,5 +125,6 @@ msg <- paste0(msg, "Missing: \n", paste0(" - ", required[!has_elements], collapse = "\n")) warning(msg, call. = FALSE) + return(FALSE) } From b1f9b178ea05b6f9b89c8afbc7516df80570bd1e Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 13:18:35 +0000 Subject: [PATCH 51/82] Update calculation of valid_length_graph, account for which entities are valid, TRUE --- R/utils-rocrate.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils-rocrate.R b/R/utils-rocrate.R index 045bcae..10ed756 100644 --- a/R/utils-rocrate.R +++ b/R/utils-rocrate.R @@ -44,7 +44,7 @@ is_rocrate <- function(rocrate) { }) # check lengths of @ids and number of entities, must be the same - valid_length_graph <- length(graph_ids) == length(valid_entities) + valid_length_graph <- length(graph_ids) == sum(valid_entities == TRUE) # has an RO-Crate Metadata descriptor entity has_rocrate_meta <- "ro-crate-metadata.json" %in% graph_ids From 62c8c7c7bb95aa743208607c3efd2e9aa50e0fff Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 13:19:01 +0000 Subject: [PATCH 52/82] Update tests to capture errors generate by the is_rocrate function --- tests/testthat/test-utils-rocrate.R | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-utils-rocrate.R b/tests/testthat/test-utils-rocrate.R index 39e1e1d..53de92b 100644 --- a/tests/testthat/test-utils-rocrate.R +++ b/tests/testthat/test-utils-rocrate.R @@ -25,8 +25,10 @@ test_that("is_rocrate works", { # modify entity to remove @type basic_crate$`@graph`[[1]]$`@type` <- NULL - expect_warning(basic_crate |> rocrateR::is_rocrate()) - + expect_error( + expect_warning(basic_crate |> rocrateR::is_rocrate()) + ) + # set invalid context value basic_crate$`@context` <- "My awesome, but non-standard context" expect_error( @@ -43,5 +45,7 @@ test_that("is_rocrate works", { # drop @type from one of the entities basic_crate_v5 <- rocrateR::rocrate() basic_crate_v5$`@graph`[[2]]$`@type` <- NULL - expect_warning(rocrateR::is_rocrate(basic_crate_v5)) + expect_error( + expect_warning(rocrateR::is_rocrate(basic_crate_v5)) + ) }) From 7e42cf34e4e7b98fe027c86ba9a5a0f1a9c80eb3 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 13:37:50 +0000 Subject: [PATCH 53/82] New test to capture case in which an RO-Crate has multiple payload directories --- tests/testthat/test-utils-bag.R | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/testthat/test-utils-bag.R b/tests/testthat/test-utils-bag.R index 05b28a6..9d5222f 100644 --- a/tests/testthat/test-utils-bag.R +++ b/tests/testthat/test-utils-bag.R @@ -232,6 +232,20 @@ test_that("unbag_rocrate works", { # compare with the original RO-Crate expect_equal(basic_crate_from_bag, basic_crate) + # add new directory in root of RO-Crate + dir.create(file.path(rocrate_bag_files, "not_a_crate")) + # create new zip file with the additional directory + new_roc_zip_file <- file.path(dirname(rocrate_bag_files), "test_roc2.zip") + expect_false(file.exists(new_roc_zip_file)) + zip(new_roc_zip_file, rocrate_bag_files) + expect_true(file.exists(new_roc_zip_file)) + expect_error( + temp_roc_files <- rocrateR::unbag_rocrate(new_roc_zip_file) + ) + # delete new zip + unlink(new_roc_zip_file, force = TRUE) + expect_false(file.exists(new_roc_zip_file)) + # delete temporary directory unlink(tmp_dir, recursive = TRUE, force = TRUE) From a76b2fce6e7077d00dc496f46c1a5432f60b4893 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 16:17:02 +0000 Subject: [PATCH 54/82] Update URLs for RO-Crate and BagIt specifications --- DESCRIPTION | 2 +- R/rocrate.R | 2 +- R/utils-bag.R | 4 ++-- README.Rmd | 7 ++++--- README.md | 22 +++++++++++----------- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index aa9b10c..88473ed 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -9,7 +9,7 @@ Authors@R: c( comment = c(ORCID = "0000-0001-5036-8661")), person("Research Object community", role = c("cph"))) Description: R package for creating, manipulating and reading RO-Crates. Latest - supported version of the specification: https://w3id.org/ro/crate/1.2. + supported version of the specification: . License: MIT + file LICENSE Suggests: spelling, diff --git a/R/rocrate.R b/R/rocrate.R index a92cc84..9b3d7a2 100644 --- a/R/rocrate.R +++ b/R/rocrate.R @@ -2,7 +2,7 @@ #' #' Create a new RO-Crate object. This object includes basic skeleton for the #' RO-Crate metadata descriptor (`ro-crate-metadata.json`) file, as described -#' in the official documentation: https://w3id.org/ro/crate/1.2 > +#' in the official documentation: https://w3id.org/ro/crate/1.2/ > #' [Root Data Entity](https://www.researchobject.org/ro-crate/specification/1.2/root-data-entity.html). #' #' @param ... Optional entities to include in the RO-Crate (e.g., author). diff --git a/R/utils-bag.R b/R/utils-bag.R index d32bc37..c3ad2e7 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -2,7 +2,7 @@ #' #' Bag the contents of an RO-Crate using the BagIt file packaging format v1.0. #' For more details see the definition: -#' \url{https://datatracker.ietf.org/doc/html/rfc8493} +#' \doi{10.17487/RFC8493} #' #' @param x A string to a path containing at the very minimum an RO-Crate #' metadata descriptor file, `ro-crate-metadata.json`. Alternatively, an @@ -200,7 +200,7 @@ bagit_tagmanifest <- function(path, files, algo = "sha512") { #' (default: `"sha512"`). See \link[digest]{digest} for more details. #' @param bagit_version String with version of BagIt used to generate the #' RO-Crate bag (default: `"1.0"`). -#' See \url{https://www.rfc-editor.org/info/rfc8493} for more details. +#' See \doi{10.17487/RFC8493} for more details. #' #' @returns Returns invisibly the RO-Crate pointed by `path`. #' @export diff --git a/README.Rmd b/README.Rmd index 720dd85..9f249bf 100644 --- a/README.Rmd +++ b/README.Rmd @@ -21,7 +21,7 @@ knitr::opts_chunk$set( [![Codecov test coverage](https://codecov.io/gh/ResearchObject/ro-crate-r/graph/badge.svg)](https://app.codecov.io/gh/ResearchObject/ro-crate-r) -The goal of `{rocrateR}` is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2. +The goal of `{rocrateR}` is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2/. ## 0. Installation @@ -77,7 +77,7 @@ unlink(tmp) ## 2. Including additional entities -In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include additional entities in your RO-Crate. Entities must contain at least two components `@id` and `@type` (see [https://w3id.org/ro/crate/1.2](https://w3id.org/ro/crate/1.2) for details). +In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include additional entities in your RO-Crate. Entities must contain at least two components `@id` and `@type` (see [https://w3id.org/ro/crate/1.2/](https://w3id.org/ro/crate/1.2/) for details). For example, a contextual entity can be defined as follows: @@ -210,7 +210,8 @@ basic_ro_crate_alt <- basic_ro_crate |> ## 4. Create an RO-Crate Bag Here we will explore the BagIt file packaging format, which is the recommended -to use for _bagging_ RO-Crates. BagIt is described in [RFC 8493](https://tools.ietf.org/html/rfc8493): +to use for _bagging_ RO-Crates. BagIt is described in +[RFC 8493](https://doi.org/10.17487/RFC8493): > [BagIt is] … a set of hierarchical file layout conventions for storage and transfer of arbitrary digital content. A “bag” has just enough structure to enclose descriptive metadata “tags” and a file “payload” but does not require knowledge of the payload’s internal semantics. This BagIt format is suitable for reliable storage and transfer. diff --git a/README.md b/README.md index e6d44c4..63a8047 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ coverage](https://codecov.io/gh/ResearchObject/ro-crate-r/graph/badge.svg)](http The goal of `{rocrateR}` is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version of the -specification: . +specification: . ## 0. Installation @@ -68,7 +68,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-27", +#> "datePublished": "2025-10-28", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -111,7 +111,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-27\"," +#> [19] " \"datePublished\": \"2025-10-28\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -128,7 +128,7 @@ unlink(tmp) In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include additional entities in your RO-Crate. Entities must contain at least two -components `@id` and `@type` (see for +components `@id` and `@type` (see for details). For example, a contextual entity can be defined as follows: @@ -193,7 +193,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-27", +#> "datePublished": "2025-10-28", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -272,7 +272,7 @@ print(basic_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-27", +#> "datePublished": "2025-10-28", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -432,7 +432,7 @@ basic_ro_crate_alt <- basic_ro_crate |> Here we will explore the BagIt file packaging format, which is the recommended to use for *bagging* RO-Crates. BagIt is described in [RFC -8493](https://tools.ietf.org/html/rfc8493): +8493](https://doi.org/10.17487/RFC8493): > \[BagIt is\] … a set of hierarchical file layout conventions for > storage and transfer of arbitrary digital content. A “bag” has just @@ -469,7 +469,7 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3lnH4A/rocrate-c13e5e298979aa6eced8bd5e6d84d3c4/rocrate-92cb32e017ce9694ca07225268e98416.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp9sZFGp/rocrate-8281e19f5e9c38872cb6113e1c00bff5/rocrate-e99905b0719453c23ebb519c9959bcdd.zip ``` ### 4.2. `rocrateR::is_rocrate_bag()` @@ -514,7 +514,7 @@ print(basic_ro_crate_contents) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-27", +#> "datePublished": "2025-10-28", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -533,11 +533,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3lnH4A/rocrate-c13e5e298979aa6eced8bd5e6d84d3c4/ROC +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp9sZFGp/rocrate-8281e19f5e9c38872cb6113e1c00bff5/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp3lnH4A/rocrate-c13e5e298979aa6eced8bd5e6d84d3c4/ROC/rocrate-92cb32e017ce9694ca07225268e98416 +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp9sZFGp/rocrate-8281e19f5e9c38872cb6113e1c00bff5/ROC/rocrate-e99905b0719453c23ebb519c9959bcdd #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json From b50127db2ddb78cc078037621826ad6df86b8a62 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 28 Oct 2025 16:17:13 +0000 Subject: [PATCH 55/82] New build --- man/bag_rocrate.Rd | 2 +- man/bagit_declaration.Rd | 2 +- man/dot-validate_rocrate_bag.Rd | 2 +- man/is_rocrate_bag.Rd | 2 +- man/rocrate.Rd | 2 +- man/rocrateR-package.Rd | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/man/bag_rocrate.Rd b/man/bag_rocrate.Rd index 0568265..d58624c 100644 --- a/man/bag_rocrate.Rd +++ b/man/bag_rocrate.Rd @@ -49,7 +49,7 @@ String with full path to the final RO-Crate bag. \description{ Bag the contents of an RO-Crate using the BagIt file packaging format v1.0. For more details see the definition: -\url{https://datatracker.ietf.org/doc/html/rfc8493} +\doi{10.17487/RFC8493} } \seealso{ Other bag_rocrate: diff --git a/man/bagit_declaration.Rd b/man/bagit_declaration.Rd index 625429e..fd1378c 100644 --- a/man/bagit_declaration.Rd +++ b/man/bagit_declaration.Rd @@ -22,7 +22,7 @@ bagit_declaration(path, version = "1.0") \item{bagit_version}{String with version of BagIt used to generate the RO-Crate bag (default: \code{"1.0"}). -See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} +See \doi{10.17487/RFC8493} for more details.} } \value{ A list with \code{status} and \code{errors} identified. diff --git a/man/dot-validate_rocrate_bag.Rd b/man/dot-validate_rocrate_bag.Rd index 9ebae8b..70da587 100644 --- a/man/dot-validate_rocrate_bag.Rd +++ b/man/dot-validate_rocrate_bag.Rd @@ -16,7 +16,7 @@ to a directory containing an RO-Crate bag.} \item{bagit_version}{String with version of BagIt used to generate the RO-Crate bag (default: \code{"1.0"}). -See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} +See \doi{10.17487/RFC8493} for more details.} } \value{ Returns invisibly the RO-Crate pointed by \code{path}. diff --git a/man/is_rocrate_bag.Rd b/man/is_rocrate_bag.Rd index 88c8d58..e7557ae 100644 --- a/man/is_rocrate_bag.Rd +++ b/man/is_rocrate_bag.Rd @@ -16,7 +16,7 @@ to a directory containing an RO-Crate bag.} \item{bagit_version}{String with version of BagIt used to generate the RO-Crate bag (default: \code{"1.0"}). -See \url{https://www.rfc-editor.org/info/rfc8493} for more details.} +See \doi{10.17487/RFC8493} for more details.} } \value{ Returns invisibly the RO-Crate pointed by \code{path}. diff --git a/man/rocrate.Rd b/man/rocrate.Rd index be4b7a6..85c979c 100644 --- a/man/rocrate.Rd +++ b/man/rocrate.Rd @@ -48,7 +48,7 @@ RO-Crate object, list with an additional class, \code{rocrate}. \description{ Create a new RO-Crate object. This object includes basic skeleton for the RO-Crate metadata descriptor (\code{ro-crate-metadata.json}) file, as described -in the official documentation: https://w3id.org/ro/crate/1.2 > +in the official documentation: https://w3id.org/ro/crate/1.2/ > \href{https://www.researchobject.org/ro-crate/specification/1.2/root-data-entity.html}{Root Data Entity}. } \examples{ diff --git a/man/rocrateR-package.Rd b/man/rocrateR-package.Rd index 7439209..92272fe 100644 --- a/man/rocrateR-package.Rd +++ b/man/rocrateR-package.Rd @@ -6,7 +6,7 @@ \alias{rocrateR-package} \title{rocrateR: RO-Crate R Package Wrapper} \description{ -R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2. +R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: \url{https://w3id.org/ro/crate/1.2/}. } \author{ \strong{Maintainer}: Roberto Villegas-Diaz \email{r.villegas-diaz@outlook.com} (\href{https://orcid.org/0000-0001-5036-8661}{ORCID}) From de3cb2915315e17cdf282482b751bc354fb0c67a Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Wed, 29 Oct 2025 08:52:22 +0000 Subject: [PATCH 56/82] Add cran-comments to list of ignored files from builds --- .Rbuildignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.Rbuildignore b/.Rbuildignore index 0ea1c10..6822b29 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -5,4 +5,5 @@ ^cran-comments.md$ ^README.Rmd$ ^LICENSE.md$ -^inst$ \ No newline at end of file +^inst$ +^cran-comments\.md$ From c5979c7ac20281b44ab2b6f85ce83110c47fa797 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Wed, 29 Oct 2025 09:16:05 +0000 Subject: [PATCH 57/82] Update documentation for get_entity and return when no entities are found, NULL --- R/entity.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/entity.R b/R/entity.R index 7b25074..b11269b 100644 --- a/R/entity.R +++ b/R/entity.R @@ -198,7 +198,7 @@ entity.default <- function(x, ...) { #' @param type String with the type of the RO-Crate entity(ies) within `@graph` #' to retrieve (optional if `id` is provided). #' -#' @returns List with found entity object(s). +#' @returns List with found entity object(s), if any, `NULL` otherwise. #' @export #' #' @examples @@ -284,8 +284,8 @@ get_entity <- function(rocrate, id = NULL, type = NULL) { call. = FALSE) } - # return an empty entity, in case no valid entity was found - structure(list(), class = c("entity", "list")) + # return NULL invisibly, if no entities were found + return(invisible(NULL)) } #' Remove entity From 8190d0ae232ce4933951cab10f69ec66dc75f0ab Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:03:25 +0000 Subject: [PATCH 58/82] Relocate hex logo --- README.Rmd | 2 +- README.md | 18 +++++++++--------- {inst/images => man/figures}/logo.png | Bin 3 files changed, 10 insertions(+), 10 deletions(-) rename {inst/images => man/figures}/logo.png (100%) diff --git a/README.Rmd b/README.Rmd index 9f249bf..9771ed0 100644 --- a/README.Rmd +++ b/README.Rmd @@ -13,7 +13,7 @@ knitr::opts_chunk$set( ) ``` -# rocrateR: RO-Crate R Package Wrapper logo +# rocrateR: RO-Crate R Package Wrapper logo [![CRAN status](https://www.r-pkg.org/badges/version/rocrateR)](https://CRAN.R-project.org/package=rocrateR) diff --git a/README.md b/README.md index 63a8047..76d177e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# rocrateR: RO-Crate R Package Wrapper logo +# rocrateR: RO-Crate R Package Wrapper logo @@ -68,7 +68,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-28", +#> "datePublished": "2025-10-31", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -111,7 +111,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-28\"," +#> [19] " \"datePublished\": \"2025-10-31\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -193,7 +193,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-28", +#> "datePublished": "2025-10-31", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -272,7 +272,7 @@ print(basic_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-28", +#> "datePublished": "2025-10-31", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -469,7 +469,7 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp9sZFGp/rocrate-8281e19f5e9c38872cb6113e1c00bff5/rocrate-e99905b0719453c23ebb519c9959bcdd.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp5nOLzg/rocrate-650a59d174de47ab371376816d51bd1d/rocrate-4077e698e44a0bff8be45b8fa35ea037.zip ``` ### 4.2. `rocrateR::is_rocrate_bag()` @@ -514,7 +514,7 @@ print(basic_ro_crate_contents) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-28", +#> "datePublished": "2025-10-31", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -533,11 +533,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp9sZFGp/rocrate-8281e19f5e9c38872cb6113e1c00bff5/ROC +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp5nOLzg/rocrate-650a59d174de47ab371376816d51bd1d/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp9sZFGp/rocrate-8281e19f5e9c38872cb6113e1c00bff5/ROC/rocrate-e99905b0719453c23ebb519c9959bcdd +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp5nOLzg/rocrate-650a59d174de47ab371376816d51bd1d/ROC/rocrate-4077e698e44a0bff8be45b8fa35ea037 #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json diff --git a/inst/images/logo.png b/man/figures/logo.png similarity index 100% rename from inst/images/logo.png rename to man/figures/logo.png From 58266b64bdec102adf769484a9babd26c8332974 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:05:11 +0000 Subject: [PATCH 59/82] Add support for pkgdown to generate website with documentation --- .Rbuildignore | 3 +++ .gitignore | 1 + _pkgdown.yml | 4 ++++ pkgdown/favicon/apple-touch-icon.png | Bin 0 -> 11158 bytes pkgdown/favicon/favicon-96x96.png | Bin 0 -> 5631 bytes pkgdown/favicon/favicon.ico | Bin 0 -> 15086 bytes pkgdown/favicon/favicon.svg | 3 +++ pkgdown/favicon/site.webmanifest | 21 +++++++++++++++++++ pkgdown/favicon/web-app-manifest-192x192.png | Bin 0 -> 12216 bytes pkgdown/favicon/web-app-manifest-512x512.png | Bin 0 -> 41512 bytes 10 files changed, 32 insertions(+) create mode 100644 _pkgdown.yml create mode 100644 pkgdown/favicon/apple-touch-icon.png create mode 100644 pkgdown/favicon/favicon-96x96.png create mode 100644 pkgdown/favicon/favicon.ico create mode 100644 pkgdown/favicon/favicon.svg create mode 100644 pkgdown/favicon/site.webmanifest create mode 100644 pkgdown/favicon/web-app-manifest-192x192.png create mode 100644 pkgdown/favicon/web-app-manifest-512x512.png diff --git a/.Rbuildignore b/.Rbuildignore index 6822b29..b8b1477 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -7,3 +7,6 @@ ^LICENSE.md$ ^inst$ ^cran-comments\.md$ +^_pkgdown\.yml$ +^docs$ +^pkgdown$ diff --git a/.gitignore b/.gitignore index 1f658a9..27f48ff 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ rsconnect/ *.Rproj .DS_Store +docs diff --git a/_pkgdown.yml b/_pkgdown.yml new file mode 100644 index 0000000..d71acfb --- /dev/null +++ b/_pkgdown.yml @@ -0,0 +1,4 @@ +url: ~ +template: + bootstrap: 5 + diff --git a/pkgdown/favicon/apple-touch-icon.png b/pkgdown/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1651a2729068adcac84e5033f2fa384fa6256091 GIT binary patch literal 11158 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 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon.svg b/pkgdown/favicon/favicon.svg new file mode 100644 index 0000000..9943492 --- /dev/null +++ b/pkgdown/favicon/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/pkgdown/favicon/site.webmanifest b/pkgdown/favicon/site.webmanifest new file mode 100644 index 0000000..4ebda26 --- /dev/null +++ b/pkgdown/favicon/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/pkgdown/favicon/web-app-manifest-192x192.png b/pkgdown/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..accb14fc0c22c2e912f3323d6070c568efc26dad GIT binary patch literal 12216 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
0;g_wpEA}lCDddY~-sok%Xmn)5@ zZOEDAIdK#b!XuX6q-+vT{|;)3nwy*5-Czd0txo9g(gRMByV(kzl4hz5+_z!mC0kr; zI-8-iaN-T%oMC9VEk=v!$_K<3wdRCzIw&?4B6CTsPAH(4xZlOV%hC;}kXYlU)#(PB zv=gX?bL!z^QbAg|Eo*0X%*|L*^7)Uy+w)ODT*XXMy_}D6Pl*4x@y}$7CAUowPkO)S{~*M1t9%N^7P{`8Uc>bPe@PYlD)?XmT*|mf*wJn&O0F?O2fdMq z9>BICRii7F%|06*P5<&fkR9stN)h_JoU~KFgG-Lx7=C7WH*|pQ>JSwb^{?}BqyFG< zH>VmhvuO-_Hc$*jK4NKppjC(cw#cB(QXUmW?N{Sx+t3yYw z(4BaB_j#4zxG0Kq!4 AhyVZp literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/web-app-manifest-512x512.png b/pkgdown/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..e0cb8e6512c2b251f925aa636a98d1d8c02b1aa7 GIT binary patch literal 41512 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 {J3 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 q>e$HCI`-d@ai9Eue+`dKaQG$$p)m$)JT literal 0 HcmV?d00001 From 4f1e3ee563f1f86dd945f4d1b6a995985a08597e Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:05:50 +0000 Subject: [PATCH 60/82] Add reference image for RO-Crates --- inst/images/ro-crate-w-text.png | Bin 0 -> 176598 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 inst/images/ro-crate-w-text.png diff --git a/inst/images/ro-crate-w-text.png b/inst/images/ro-crate-w-text.png new file mode 100644 index 0000000000000000000000000000000000000000..442fad718ff6281cb289a0226506ab020dc2cd13 GIT binary patch literal 176598 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 ZDGQwk!;hRTyt6Sl!VmRb^~p=O{|Be%Vom@6 literal 0 HcmV?d00001 From bbcfe237e439a854d43eb6c31ef92f928c7914e6 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:06:24 +0000 Subject: [PATCH 61/82] Add support scripts, not part of the main package --- inst/R.ignore/hex-logo.R | 39 +++++++++++++++++++++++++++++++++++++ inst/R.ignore/readme_logo.R | 3 +++ 2 files changed, 42 insertions(+) create mode 100644 inst/R.ignore/hex-logo.R create mode 100644 inst/R.ignore/readme_logo.R diff --git a/inst/R.ignore/hex-logo.R b/inst/R.ignore/hex-logo.R new file mode 100644 index 0000000..61ade27 --- /dev/null +++ b/inst/R.ignore/hex-logo.R @@ -0,0 +1,39 @@ +#' Create hexagonal logo +#' +#' Create hexagonal logo for the package. +#' +#' @param subplot Image to use as the main logo. +#' @param dpi Plot resolution (dots-per-inch). +#' @param h_color Colour for hexagon border. +#' @param h_fill Colour to fill hexagon. +#' @param output Output file (hexagonal logo). +#' @param package Title for logo (package name). +#' @param p_color Colour for package name. +#' @param url URL for package repository or website. +#' @param u_size Text size for URL. +#' +#' @return Hexagonal logo. +#' @keywords internal +hex_logo <- function(subplot = system.file("images/ro-crate-w-text.png", + package = "rocrateR"), + dpi = 600, + h_color = "#000000", + h_fill = "#FFFFFF", + output = system.file("images/logo.png", + package = "rocrateR"), + package = "rocrateR", + p_color = "#54969D", + url = "https://github.com/ResearchObject/ro-crate-r", + u_size = 1.25) { + hexSticker::sticker(subplot = subplot, package = package, + h_color = h_color, h_fill = h_fill, + dpi = dpi, + s_x = 1.0, s_y = 1.0, s_width = .7, + p_x = 1.0, p_y = 1.52, p_size = 20, p_color = p_color, + url = url, + u_angle = 30, u_color = p_color, u_size = u_size, u_y = 0.06, + filename = output) +} + +# pak::pak("emilioxavier/hexSticker") +hex_logo("inst/images/ro-crate-w-text.png", output = "inst/images/logo.png", package = "", u_size = 6.8, dpi = 600) diff --git a/inst/R.ignore/readme_logo.R b/inst/R.ignore/readme_logo.R new file mode 100644 index 0000000..b078c9a --- /dev/null +++ b/inst/R.ignore/readme_logo.R @@ -0,0 +1,3 @@ +cat(' + + ') \ No newline at end of file From 1d14155605a40c444f856e668ffe8d34dc32c47a Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:06:33 +0000 Subject: [PATCH 62/82] New build --- man/get_entity.Rd | 2 +- man/rocrateR-package.Rd | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/man/get_entity.Rd b/man/get_entity.Rd index 6826920..6233c7a 100644 --- a/man/get_entity.Rd +++ b/man/get_entity.Rd @@ -17,7 +17,7 @@ with \verb{@id} and \verb{@type}.} to retrieve (optional if \code{id} is provided).} } \value{ -List with found entity object(s). +List with found entity object(s), if any, \code{NULL} otherwise. } \description{ Get entity(ies) diff --git a/man/rocrateR-package.Rd b/man/rocrateR-package.Rd index 92272fe..d269a17 100644 --- a/man/rocrateR-package.Rd +++ b/man/rocrateR-package.Rd @@ -6,6 +6,8 @@ \alias{rocrateR-package} \title{rocrateR: RO-Crate R Package Wrapper} \description{ +\if{html}{\figure{logo.png}{options: style='float: right' alt='logo' width='120'}} + R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: \url{https://w3id.org/ro/crate/1.2/}. } \author{ From 45ec32c1081160a52ca2ed1e47d46c76c9ad5238 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:06:47 +0000 Subject: [PATCH 63/82] Add template for issues --- .github/ISSUE_TEMPLATE/issue_template.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/issue_template.md diff --git a/.github/ISSUE_TEMPLATE/issue_template.md b/.github/ISSUE_TEMPLATE/issue_template.md new file mode 100644 index 0000000..d7c9eba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template.md @@ -0,0 +1,16 @@ +--- +name: Bug report or feature request +about: Describe a bug you've seen or make a case for a new feature +--- + +Please briefly describe your problem and what output you expect. If you have a question, please don't use this form. Instead, ask on or . + +Please include a minimal reproducible example (AKA a reprex). If you've never heard of a [reprex](http://reprex.tidyverse.org/) before, start by reading . + +For more advice on how to write a great issue, see . + +Brief description of the problem + +```r +# insert reprex here +``` From 56f38eb0cfbcb1f3ec877c6056d50dde550cdfad Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:09:58 +0000 Subject: [PATCH 64/82] Update list of valid words --- inst/WORDLIST | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/inst/WORDLIST b/inst/WORDLIST index beb7d56..09afbea 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,15 +1,24 @@ BagIt CMD Codecov +Diaz ORCID POSIXt RO +Unbag +Villegas columnmajor -com +https +ies mongo -org +permalinks +rfc ro rocrate rowmajor stackoverflow unclass +validator +validators +visualised +www From 56bac95684741d705d77efc068b32dc5c3f11440 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:10:47 +0000 Subject: [PATCH 65/82] Update words --- inst/WORDLIST | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/inst/WORDLIST b/inst/WORDLIST index 09afbea..9778c83 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,24 +1,19 @@ BagIt CMD Codecov -Diaz ORCID POSIXt RO Unbag -Villegas columnmajor -https +com ies mongo -permalinks +org rfc ro rocrate rowmajor stackoverflow unclass -validator -validators -visualised www From 63803fc127dd695105a846cfb37f3ac0e286cd8f Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:11:29 +0000 Subject: [PATCH 66/82] Update CRAN comments --- cran-comments.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cran-comments.md b/cran-comments.md index 858617d..316c022 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -3,3 +3,6 @@ 0 errors | 0 warnings | 1 note * This is a new release. +* Note that URLs for https://w3id.org/ro/crate/1.2/ redirect to +https://www.researchobject.org/ro-crate/specification/1.2/; however, the former +is the permalink and it's the preferred way to reference this standard. From 51994071fba1abc65b0a77e59a959b5b63096342 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:39:39 +0000 Subject: [PATCH 67/82] Add background details for RO-Crates --- README.Rmd | 66 ++++++++++++++++++++++++++++-------------- README.md | 84 ++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 101 insertions(+), 49 deletions(-) diff --git a/README.Rmd b/README.Rmd index 9771ed0..4821b6f 100644 --- a/README.Rmd +++ b/README.Rmd @@ -23,13 +23,21 @@ knitr::opts_chunk$set( The goal of `{rocrateR}` is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: https://w3id.org/ro/crate/1.2/. +#### What is an RO-Crate? + +> An RO-Crate is an integrated view through which you can see an entire Research Object; the methods, the data, the output and the outcomes of a project or a piece of work. Linking all this together enables the sharing of research outputs with their context, as a coherent whole. +> +> RO-Crates link data and metadata no matter where they are stored – so that from a paper, you can find the data, and from the data, you can find its authors, and so on. + +For more details, please visit: https://www.researchobject.org/ro-crate/about_ro_crate + ## 0. Installation You can install the released version of `{rocrateR}` from [CRAN](https://cran.r-project.org/package=rocrateR) with: ``` r # install.packages("pak") -pak::pak("dsROCrate") +pak::pak("rocrateR") ``` And the development version from [GitHub](https://github.com/ResearchObject/ro-crate-r/) with: @@ -39,7 +47,21 @@ And the development version from [GitHub](https://github.com/ResearchObject/ro-c pak::pak("ResearchObject/ro-crate-r@dev") ``` -## 1. First RO-Crate +## 1. Functions Overview + +| Function | Purpose | +|-----------|----------| +| `rocrate()` | Create an empty or initialized RO-Crate | +| `entity()` | Define a new entity (Person, Dataset, etc.) | +| `add_entity()` / `add_entities()` | Add entities to a crate | +| `get_entity()` | Retrieve entities by `@id` or `@type` | +| `remove_entity()` / `remove_entities()` | Remove one or more entities | +| `write_rocrate()` | Save RO-Crate to disk | +| `bag_rocrate()` / `is_rocrate_bag()` / `unbag_rocrate()` | Bagging and unbagging RO-Crates | +| `validate_rocrate()` *(planned)* | Validate RO-Crate using external Python validator | + + +## 2. First RO-Crate The following command creates an RO-Crate Metadata descriptor (`ro-crate-metadata.json`). This should be stored inside the root (`./`) of your RO-Crate. @@ -75,7 +97,7 @@ readLines(tmp) unlink(tmp) ``` -## 2. Including additional entities +## 3. Including additional entities In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include additional entities in your RO-Crate. Entities must contain at least two components `@id` and `@type` (see [https://w3id.org/ro/crate/1.2/](https://w3id.org/ro/crate/1.2/) for details). @@ -123,12 +145,12 @@ my_second_ro_crate <- rocrateR::rocrate(person_rvd, organisation_uol) |> ```{r} print(my_second_ro_crate) ``` -## 3. Wrangle RO-Crate +## 4. Wrangle RO-Crate Previously, we covered how to include additional entities, other valid operations are to extract (`rocrateR::get_entity()`) and remove (`rocrateR::remove_entities()`). -### 3.1. Set up +### 4.1. Set up ```{r} # create basic RO-Crate @@ -154,11 +176,11 @@ basic_ro_crate <- basic_ro_crate |> print(basic_ro_crate) ``` -### 3.2. Extract entity +### 4.2. Extract entity We can extract entities via the `@id`, `@type` or both: -#### 3.2.1. Extract using `@id` +#### 4.2.1. Extract using `@id` ```{r} basic_ro_crate_project <- basic_ro_crate |> @@ -167,7 +189,7 @@ basic_ro_crate_project <- basic_ro_crate |> print(basic_ro_crate_project) ``` -#### 3.2.2. Extract using `@type` +#### 4.2.2. Extract using `@type` ```{r} basic_ro_crate_datasets <- basic_ro_crate |> @@ -176,7 +198,7 @@ basic_ro_crate_datasets <- basic_ro_crate |> print(basic_ro_crate_datasets) ``` -#### 3.2.3. Extract using `@id` and `@type` +#### 4.2.3. Extract using `@id` and `@type` ```{r} basic_ro_crate_dataset_root <- basic_ro_crate |> @@ -185,29 +207,29 @@ basic_ro_crate_dataset_root <- basic_ro_crate |> print(basic_ro_crate_dataset_root) ``` -### 3.3. Remove entity +### 4.3. Remove entity Similarly, we can remove entities from an RO-Crate: -#### 3.3.1. Remove using scalar `@id` +#### 4.3.1. Remove using scalar `@id` ```{r} basic_ro_crate_alt <- basic_ro_crate |> rocrateR::remove_entity("#proj101") ``` -#### 3.3.2. Remove using `entity` object +#### 4.3.2. Remove using `entity` object ```{r} basic_ro_crate_alt <- basic_ro_crate |> rocrateR::remove_entity(project_entity) ``` -#### 3.3.3. Remove multiple entities +#### 4.3.3. Remove multiple entities ```{r} basic_ro_crate_alt <- basic_ro_crate |> rocrateR::remove_entities(dataset_entities) ``` -## 4. Create an RO-Crate Bag +## 5. Create an RO-Crate Bag Here we will explore the BagIt file packaging format, which is the recommended to use for _bagging_ RO-Crates. BagIt is described in @@ -226,7 +248,7 @@ For more details, run the following command: ?rocrateR::bag_rocrate ``` -### 4.1. `rocrateR::bag_rocrate()` +### 5.1. `rocrateR::bag_rocrate()` Here we will create an RO-Crate bag inside temporary directory: @@ -244,7 +266,7 @@ path_to_rocrate_bag <- basic_ro_crate |> ``` -### 4.2. `rocrateR::is_rocrate_bag()` +### 5.2. `rocrateR::is_rocrate_bag()` We can use the function `rocrateR::is_rocrate_bag()` to verify that a given path points to a ZIP file or a directory with a valid RO-Crate bag. The expected @@ -266,7 +288,7 @@ print(basic_ro_crate_contents) ``` -### 4.3. `rocrateR::unbag_rocrate()` +### 5.3. `rocrateR::unbag_rocrate()` We can explore the contents of the RO-Crate bag with the following commands: @@ -290,24 +312,24 @@ unlink(tmp_dir, recursive = TRUE, force = TRUE) ``` -## 5. Validation (experimental) +## 6. Validation (experimental) As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at https://www.researchobject.org/ro-crate/tools), here we will explore the Python package [`rocrate-validator`](https://github.com/crs4/rocrate-validator). For installation details, please visit https://github.com/crs4/rocrate-validator. -Note that we will rely on [`{reticulate}`](https://cran.r-project.org/package=reticulate) to install and execute the validator within R: +⚠️ The validation workflow depends on Python’s [`rocrate-validator`](https://github.com/crs4/rocrate-validator). Ensure you have a working Python installation and [`{reticulate}`](https://cran.r-project.org/package=reticulate) configured correctly (`reticulate::py_config()`). On Windows, you may need to restart R after installation. -### 5.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +### 6.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) ``` r pak::pkg_install("reticulate") ``` -### 5.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) +### 6.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) ``` r reticulate::py_install("roc-validator", env = "rocrateR") ``` -### 5.3. Create example RO-Crate and validate it +### 6.3. Create example RO-Crate and validate it ```{r} basic_ro_crate <- rocrateR::rocrate() diff --git a/README.md b/README.md index 76d177e..0650083 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,20 @@ The goal of `{rocrateR}` is to provide an R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: . +#### What is an RO-Crate? + +> An RO-Crate is an integrated view through which you can see an entire +> Research Object; the methods, the data, the output and the outcomes of +> a project or a piece of work. Linking all this together enables the +> sharing of research outputs with their context, as a coherent whole. +> +> RO-Crates link data and metadata no matter where they are stored – so +> that from a paper, you can find the data, and from the data, you can +> find its authors, and so on. + +For more details, please visit: + + ## 0. Installation You can install the released version of `{rocrateR}` from @@ -23,7 +37,7 @@ You can install the released version of `{rocrateR}` from ``` r # install.packages("pak") -pak::pak("dsROCrate") +pak::pak("rocrateR") ``` And the development version from @@ -34,7 +48,20 @@ And the development version from pak::pak("ResearchObject/ro-crate-r@dev") ``` -## 1. First RO-Crate +## 1. Functions Overview + +| Function | Purpose | +|----|----| +| `rocrate()` | Create an empty or initialized RO-Crate | +| `entity()` | Define a new entity (Person, Dataset, etc.) | +| `add_entity()` / `add_entities()` | Add entities to a crate | +| `get_entity()` | Retrieve entities by `@id` or `@type` | +| `remove_entity()` / `remove_entities()` | Remove one or more entities | +| `write_rocrate()` | Save RO-Crate to disk | +| `bag_rocrate()` / `is_rocrate_bag()` / `unbag_rocrate()` | Bagging and unbagging RO-Crates | +| `validate_rocrate()` *(planned)* | Validate RO-Crate using external Python validator | + +## 2. First RO-Crate The following command creates an RO-Crate Metadata descriptor (`ro-crate-metadata.json`). This should be stored inside the root (`./`) @@ -123,7 +150,7 @@ readLines(tmp) unlink(tmp) ``` -## 2. Including additional entities +## 3. Including additional entities In the previous section we created a very basic RO-Crate with the `rocrateR::rocrate()` function; however, you are likely to include @@ -219,13 +246,13 @@ print(my_second_ro_crate) #> } ``` -## 3. Wrangle RO-Crate +## 4. Wrangle RO-Crate Previously, we covered how to include additional entities, other valid operations are to extract (`rocrateR::get_entity()`) and remove (`rocrateR::remove_entities()`). -### 3.1. Set up +### 4.1. Set up ``` r # create basic RO-Crate @@ -328,11 +355,11 @@ print(basic_ro_crate) #> } ``` -### 3.2. Extract entity +### 4.2. Extract entity We can extract entities via the `@id`, `@type` or both: -#### 3.2.1. Extract using `@id` +#### 4.2.1. Extract using `@id` ``` r basic_ro_crate_project <- basic_ro_crate |> @@ -345,7 +372,7 @@ print(basic_ro_crate_project) #> @type = 'Project' ``` -#### 3.2.2. Extract using `@type` +#### 4.2.2. Extract using `@type` ``` r basic_ro_crate_datasets <- basic_ro_crate |> @@ -383,7 +410,7 @@ print(basic_ro_crate_datasets) #> @type = 'Dataset' ``` -#### 3.2.3. Extract using `@id` and `@type` +#### 4.2.3. Extract using `@id` and `@type` ``` r basic_ro_crate_dataset_root <- basic_ro_crate |> @@ -396,11 +423,11 @@ print(basic_ro_crate_dataset_root) #> @type = 'Dataset' ``` -### 3.3. Remove entity +### 4.3. Remove entity Similarly, we can remove entities from an RO-Crate: -#### 3.3.1. Remove using scalar `@id` +#### 4.3.1. Remove using scalar `@id` ``` r basic_ro_crate_alt <- basic_ro_crate |> @@ -408,7 +435,7 @@ basic_ro_crate_alt <- basic_ro_crate |> #> Removing the entity with @id = '#proj101'. ``` -#### 3.3.2. Remove using `entity` object +#### 4.3.2. Remove using `entity` object ``` r basic_ro_crate_alt <- basic_ro_crate |> @@ -416,7 +443,7 @@ basic_ro_crate_alt <- basic_ro_crate |> #> Removing the entity with @id = '#proj101'. ``` -#### 3.3.3. Remove multiple entities +#### 4.3.3. Remove multiple entities ``` r basic_ro_crate_alt <- basic_ro_crate |> @@ -428,7 +455,7 @@ basic_ro_crate_alt <- basic_ro_crate |> #> Removing the entity with @id = '5'. ``` -## 4. Create an RO-Crate Bag +## 5. Create an RO-Crate Bag Here we will explore the BagIt file packaging format, which is the recommended to use for *bagging* RO-Crates. BagIt is described in [RFC @@ -453,7 +480,7 @@ For more details, run the following command: ?rocrateR::bag_rocrate ``` -### 4.1. `rocrateR::bag_rocrate()` +### 5.1. `rocrateR::bag_rocrate()` Here we will create an RO-Crate bag inside temporary directory: @@ -469,10 +496,10 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp5nOLzg/rocrate-650a59d174de47ab371376816d51bd1d/rocrate-4077e698e44a0bff8be45b8fa35ea037.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//RtmpOQ9QWd/rocrate-c7e0ace051a85c6d81998344a058a520/rocrate-379419d26e8b361a43544fa851839839.zip ``` -### 4.2. `rocrateR::is_rocrate_bag()` +### 5.2. `rocrateR::is_rocrate_bag()` We can use the function `rocrateR::is_rocrate_bag()` to verify that a given path points to a ZIP file or a directory with a valid RO-Crate @@ -523,7 +550,7 @@ print(basic_ro_crate_contents) #> } ``` -### 4.3. `rocrateR::unbag_rocrate()` +### 5.3. `rocrateR::unbag_rocrate()` We can explore the contents of the RO-Crate bag with the following commands: @@ -533,11 +560,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp5nOLzg/rocrate-650a59d174de47ab371376816d51bd1d/ROC +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//RtmpOQ9QWd/rocrate-c7e0ace051a85c6d81998344a058a520/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp5nOLzg/rocrate-650a59d174de47ab371376816d51bd1d/ROC/rocrate-4077e698e44a0bff8be45b8fa35ea037 +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//RtmpOQ9QWd/rocrate-c7e0ace051a85c6d81998344a058a520/ROC/rocrate-379419d26e8b361a43544fa851839839 #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json @@ -550,7 +577,7 @@ fs::dir_tree(path_to_rocrate_bag_contents) unlink(tmp_dir, recursive = TRUE, force = TRUE) ``` -## 5. Validation (experimental) +## 6. Validation (experimental) As you develop your RO-Crates, you might want to validate them. There are few validators online (some of which can be found at @@ -560,23 +587,26 @@ the Python package installation details, please visit . -Note that we will rely on -[`{reticulate}`](https://cran.r-project.org/package=reticulate) to -install and execute the validator within R: +⚠️ The validation workflow depends on Python’s +[`rocrate-validator`](https://github.com/crs4/rocrate-validator). Ensure +you have a working Python installation and +[`{reticulate}`](https://cran.r-project.org/package=reticulate) +configured correctly (`reticulate::py_config()`). On Windows, you may +need to restart R after installation. -### 5.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) +### 6.1. Install [`{reticulate}`](https://cran.r-project.org/package=reticulate) ``` r pak::pkg_install("reticulate") ``` -### 5.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) +### 6.2. Install [`rocrate-validator`](https://github.com/crs4/rocrate-validator) ``` r reticulate::py_install("roc-validator", env = "rocrateR") ``` -### 5.3. Create example RO-Crate and validate it +### 6.3. Create example RO-Crate and validate it ``` r basic_ro_crate <- rocrateR::rocrate() From e5f55b98b711d323cec7182571b2e9a89a3d4429 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 11:43:17 +0000 Subject: [PATCH 68/82] Add URL to repo and BugReports --- DESCRIPTION | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DESCRIPTION b/DESCRIPTION index 88473ed..7f60ede 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -17,6 +17,9 @@ Suggests: Config/testthat/edition: 3 Encoding: UTF-8 Language: en-GB +URL: https://github.com/ResearchObject/ro-crate-r/, + https://ResearchObject.github.io/ro-crate-r/ +BugReports: https://github.com/ResearchObject/ro-crate-r/issues/ Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.3 Imports: From fdfdf4c74aaf0101b819a30f82b7e8627a1e4540 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 12:17:42 +0000 Subject: [PATCH 69/82] Add NEWS.md --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 NEWS.md diff --git a/NEWS.md b/NEWS.md new file mode 100644 index 0000000..07d9e35 --- /dev/null +++ b/NEWS.md @@ -0,0 +1,3 @@ +# rocrateR 0.0.1 + +* Initial CRAN submission. From e6988e862482083699d06ac46bdabf91d156b843 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 14:30:35 +0000 Subject: [PATCH 70/82] Add CRAN-SUBMISSION to list of ignored files --- .Rbuildignore | 1 + .gitignore | 16 +--------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index b8b1477..f5d97ef 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -10,3 +10,4 @@ ^_pkgdown\.yml$ ^docs$ ^pkgdown$ +^CRAN-SUBMISSION$ diff --git a/.gitignore b/.gitignore index 27f48ff..39fa0e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,54 +1,40 @@ # History files .Rhistory .Rapp.history - # Session Data files .RData .RDataTmp - # User-specific files .Ruserdata - # Example code in package build process *-Ex.R - # Output files from R CMD build /*.tar.gz - # Output files from R CMD check /*.Rcheck/ - # RStudio files .Rproj.user/ - # produced vignettes vignettes/*.html vignettes/*.pdf - # OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 .httr-oauth - # knitr and R markdown default cache directories *_cache/ /cache/ - # Temporary files created by R markdown *.utf8.md *.knit.md - # R Environment Variables .Renviron - # pkgdown site docs/ - # translation temp files po/*~ - # RStudio Connect folder rsconnect/ .Rproj.user *.Rproj - .DS_Store docs +CRAN-SUBMISSION From b9c2155c2174c3c1946303e3b47867b5e9f99384 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 14:31:53 +0000 Subject: [PATCH 71/82] Update list of URLs --- DESCRIPTION | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7f60ede..13e9216 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -17,8 +17,7 @@ Suggests: Config/testthat/edition: 3 Encoding: UTF-8 Language: en-GB -URL: https://github.com/ResearchObject/ro-crate-r/, - https://ResearchObject.github.io/ro-crate-r/ +URL: https://github.com/ResearchObject/ro-crate-r/ BugReports: https://github.com/ResearchObject/ro-crate-r/issues/ Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.3 From fb42621a119a4a6032c14732099ef2c6d197a236 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 14:38:19 +0000 Subject: [PATCH 72/82] New build --- man/rocrateR-package.Rd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/man/rocrateR-package.Rd b/man/rocrateR-package.Rd index d269a17..46fc962 100644 --- a/man/rocrateR-package.Rd +++ b/man/rocrateR-package.Rd @@ -9,6 +9,14 @@ \if{html}{\figure{logo.png}{options: style='float: right' alt='logo' width='120'}} R package for creating, manipulating and reading RO-Crates. Latest supported version of the specification: \url{https://w3id.org/ro/crate/1.2/}. +} +\seealso{ +Useful links: +\itemize{ + \item \url{https://github.com/ResearchObject/ro-crate-r/} + \item Report bugs at \url{https://github.com/ResearchObject/ro-crate-r/issues/} +} + } \author{ \strong{Maintainer}: Roberto Villegas-Diaz \email{r.villegas-diaz@outlook.com} (\href{https://orcid.org/0000-0001-5036-8661}{ORCID}) From c8ed4782718289c62a62028954f51a596fdabb9c Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Fri, 31 Oct 2025 14:38:33 +0000 Subject: [PATCH 73/82] New render --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0650083..9cb7ca6 100644 --- a/README.md +++ b/README.md @@ -496,7 +496,7 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//RtmpOQ9QWd/rocrate-c7e0ace051a85c6d81998344a058a520/rocrate-379419d26e8b361a43544fa851839839.zip +#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp1XrJxt/rocrate-3058b7790e4f463353d63eef7a39a68f/rocrate-74377f861ec7b87b0f160f176eebde37.zip ``` ### 5.2. `rocrateR::is_rocrate_bag()` @@ -560,11 +560,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//RtmpOQ9QWd/rocrate-c7e0ace051a85c6d81998344a058a520/ROC +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp1XrJxt/rocrate-3058b7790e4f463353d63eef7a39a68f/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//RtmpOQ9QWd/rocrate-c7e0ace051a85c6d81998344a058a520/ROC/rocrate-379419d26e8b361a43544fa851839839 +#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp1XrJxt/rocrate-3058b7790e4f463353d63eef7a39a68f/ROC/rocrate-74377f861ec7b87b0f160f176eebde37 #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json From 2dadfe7fbaa1a91dfa46f7b2e7b147d1897f456e Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Mon, 3 Nov 2025 14:57:57 +0000 Subject: [PATCH 74/82] Add missing local bindings to attempt addressing checks for the `Windows old-release` platform --- R/entity.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/entity.R b/R/entity.R index b11269b..7d8b254 100644 --- a/R/entity.R +++ b/R/entity.R @@ -177,6 +177,8 @@ entity <- function(x, ...) { #' @export entity.default <- function(x, ...) { + # define local bindings + id <- type <- NULL args <- list(...) new_entity <- list( `@id` = c(x, getElement(args, "id"))[1], From 87c1ae8910e340e23ef490d969f54a1ff45cdfe6 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 18:55:40 +0000 Subject: [PATCH 75/82] Remove examples for internal function .is_valid_url --- R/utils-url.R | 12 ------------ man/dot-is_valid_url.Rd | 13 ------------- 2 files changed, 25 deletions(-) diff --git a/R/utils-url.R b/R/utils-url.R index 05cbae6..c85b453 100644 --- a/R/utils-url.R +++ b/R/utils-url.R @@ -8,18 +8,6 @@ #' @keywords internal #' #' @source https://stackoverflow.com/a/73952264 -#' @examples -#' url <- c( -#' "w3id.org/ro/crate/1.2/context", -#' "http://w3id.org/ro/crate/1.2", -#' "http://w3id.org/ro/crate/1.2/context", -#' "https://w3id.org/ro/crate/1.2/context", -#' "123", -#' "https://w3id.org/ro/crate/1.1/context", -#' "https://w3id.org/ro/crate/1.0/context" -#' ) -#' rocrateR:::.is_valid_url(url) -#' rocrateR:::.is_valid_url(url, suffix = "/context") .is_valid_url <- function(x, suffix = "") { pattern <- paste0("(https?|ftp)://[^ /$.?#].[^\\s]*", suffix, "$") grepl(pattern, x) diff --git a/man/dot-is_valid_url.Rd b/man/dot-is_valid_url.Rd index 7f58692..06b898c 100644 --- a/man/dot-is_valid_url.Rd +++ b/man/dot-is_valid_url.Rd @@ -21,17 +21,4 @@ Boolean value indicating if the given string (`x) is a valid URL. \description{ Validate URL } -\examples{ -url <- c( - "w3id.org/ro/crate/1.2/context", - "http://w3id.org/ro/crate/1.2", - "http://w3id.org/ro/crate/1.2/context", - "https://w3id.org/ro/crate/1.2/context", - "123", - "https://w3id.org/ro/crate/1.1/context", - "https://w3id.org/ro/crate/1.0/context" -) -rocrateR:::.is_valid_url(url) -rocrateR:::.is_valid_url(url, suffix = "/context") -} \keyword{internal} From eaa1f28a704fe46725fd19fb67ed625c51c56997 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 19:02:01 +0000 Subject: [PATCH 76/82] Remove CRAN comments file from git --- .gitignore | 1 + cran-comments.md | 8 -------- 2 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 cran-comments.md diff --git a/.gitignore b/.gitignore index 39fa0e3..5e658d3 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ rsconnect/ .DS_Store docs CRAN-SUBMISSION +cran-comments.md diff --git a/cran-comments.md b/cran-comments.md deleted file mode 100644 index 316c022..0000000 --- a/cran-comments.md +++ /dev/null @@ -1,8 +0,0 @@ -## R CMD check results - -0 errors | 0 warnings | 1 note - -* This is a new release. -* Note that URLs for https://w3id.org/ro/crate/1.2/ redirect to -https://www.researchobject.org/ro-crate/specification/1.2/; however, the former -is the permalink and it's the preferred way to reference this standard. From f7e4821dac76851209e9c0ffe8552b153c51cedb Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 20:41:24 +0000 Subject: [PATCH 77/82] Update bag_rocrate to use zip:zip instead of utils::zip for the the creation of RO-Crate bags --- R/utils-bag.R | 25 +++++++++++++------------ man/bag_rocrate.Rd | 16 ++-------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/R/utils-bag.R b/R/utils-bag.R index c3ad2e7..c4ee0d3 100644 --- a/R/utils-bag.R +++ b/R/utils-bag.R @@ -24,14 +24,11 @@ bag_rocrate <- function(x, ...) { #' @param force_bag Boolean flag to indicate whether the force the creation of #' a 'bag' even if not all the files were successfully bagged #' (default: `FALSE` ~ check if all the files were copied successfully). -#' @param zip_flags String of characters with the flags to be used when -#' archiving/compressing the RO-Crate bag (default: `-r9X`, see -#' `zip -h` in the terminal for more details). #' #' @returns String with full path to the final RO-Crate bag. #' #' @export -bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE, zip_flags = "-r9X") { +bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE) { # check a valid path was given if (!dir.exists(x)) { stop("The given path, `x`, does not exist!\n", @@ -51,7 +48,7 @@ bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE, zip_fla rocrate_id <- paste0("rocrate-", digest::digest(Sys.time())) # create temporary directory, including `rocrate_id` - tmp_dir <- file.path(".", rocrate_id, "data") + tmp_dir <- file.path(tempdir(), rocrate_id, "data") # create sub-directories dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) @@ -96,10 +93,12 @@ bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE, zip_fla # compress bag contents inside original path output_bag <- file.path(output, paste0(rocrate_id, ".zip")) - bag_files <- list.files(dirname(tmp_dir), - full.names = TRUE, - recursive = TRUE) - utils::zip(output_bag, bag_files, flags = zip_flags) + bag_files <- list.files(dirname(tmp_dir), + include.dirs = TRUE, + full.names = FALSE, + recursive = FALSE) + zip::zip(output_bag, files = bag_files, + mode = "cherry-pick", root = dirname(tmp_dir)) message("RO-Crate successfully 'bagged'!\nFor details, see: ", output_bag) @@ -117,7 +116,7 @@ bag_rocrate.character <- function(x, ..., output = x, force_bag = FALSE, zip_fla #' file should be overwritten if already inside `path` (default: `FALSE`). #' #' @export -bag_rocrate.rocrate <- function(x, ..., path, output = path, overwrite = FALSE, force_bag = FALSE, zip_flags = "-r9X") { +bag_rocrate.rocrate <- function(x, ..., path, output = path, overwrite = FALSE, force_bag = FALSE) { # check the `x` object is_rocrate(x) # check a valid path was given @@ -139,7 +138,7 @@ bag_rocrate.rocrate <- function(x, ..., path, output = path, overwrite = FALSE, write_rocrate(x, file.path(path, "ro-crate-metadata.json")) # call the bag method for the given `path` - bag_rocrate(path, output = output, force_bag = force_bag, zip_flags = zip_flags) + bag_rocrate(path, output = output, force_bag = force_bag) } #' Generate BagIt declaration @@ -392,10 +391,12 @@ unbag_rocrate <- function(path, output = dirname(path), quiet = FALSE) { } # extract contents inside the `output` path - utils::unzip(path, exdir = output) + zip::unzip(path, exdir = output) # list directories inside the RO-Crate bag rocrate_bag_dir <- list.dirs(output, recursive = FALSE, full.names = FALSE) + ## filter out the payload directory (./data): + rocrate_bag_dir <- rocrate_bag_dir[!grepl("data", rocrate_bag_dir)] # check if the RO-Crate bag has only a root directory if (length(rocrate_bag_dir) == 0) { diff --git a/man/bag_rocrate.Rd b/man/bag_rocrate.Rd index d58624c..22d02bb 100644 --- a/man/bag_rocrate.Rd +++ b/man/bag_rocrate.Rd @@ -8,17 +8,9 @@ \usage{ bag_rocrate(x, ...) -\method{bag_rocrate}{character}(x, ..., output = x, force_bag = FALSE, zip_flags = "-r9X") +\method{bag_rocrate}{character}(x, ..., output = x, force_bag = FALSE) -\method{bag_rocrate}{rocrate}( - x, - ..., - path, - output = path, - overwrite = FALSE, - force_bag = FALSE, - zip_flags = "-r9X" -) +\method{bag_rocrate}{rocrate}(x, ..., path, output = path, overwrite = FALSE, force_bag = FALSE) } \arguments{ \item{x}{A string to a path containing at the very minimum an RO-Crate @@ -34,10 +26,6 @@ object with the \link[rocrateR]{rocrate} class.} a 'bag' even if not all the files were successfully bagged (default: \code{FALSE} ~ check if all the files were copied successfully).} -\item{zip_flags}{String of characters with the flags to be used when -archiving/compressing the RO-Crate bag (default: \code{-r9X}, see -\code{zip -h} in the terminal for more details).} - \item{path}{String with path to the root of the RO-Crate.} \item{overwrite}{Boolean flag to indicate if the RO-Crate metadata descriptor From 18131c1ea936f907be27f34c57c3bb1ee1d1e963 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 20:41:54 +0000 Subject: [PATCH 78/82] Add new dependency, zip --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 13e9216..d7c3f54 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -24,6 +24,7 @@ RoxygenNote: 7.3.3 Imports: digest, jsonlite, - tibble + tibble, + zip Depends: R (>= 4.1.0) From 29e471fba60fbbd62cbb2b4cb2a458ce27f49eb7 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 20:42:29 +0000 Subject: [PATCH 79/82] Update tests to delete intermediate directory and handle new RO-Crate bagging format --- tests/testthat/test-utils-bag.R | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-utils-bag.R b/tests/testthat/test-utils-bag.R index 9d5222f..7733d82 100644 --- a/tests/testthat/test-utils-bag.R +++ b/tests/testthat/test-utils-bag.R @@ -69,7 +69,7 @@ test_that("bag_rocrate works", { recursive = TRUE) ## subset files in the data/ directory rocrate_bag_files <- - basename(rocrate_bag_files[grepl("/data/", rocrate_bag_files)]) + basename(rocrate_bag_files[grepl("data/", rocrate_bag_files)]) ## list files in the original input directory tmp_dir_files <- list.files(tmp_dir, recursive = TRUE) ## subset files in the RO-Crate bag, excluding the bag itself @@ -83,6 +83,11 @@ test_that("bag_rocrate works", { # check if the temporary directory was successfully deleted expect_false(dir.exists(tmp_dir)) + + # delete temporary directory used for validation + unlink(file.path(dirname(tmp_dir), "VALIDATION"), + recursive = TRUE, force = TRUE) + expect_false(dir.exists(file.path(dirname(tmp_dir), "VALIDATION"))) }) test_that("is_rocrate_bag works", { @@ -237,7 +242,7 @@ test_that("unbag_rocrate works", { # create new zip file with the additional directory new_roc_zip_file <- file.path(dirname(rocrate_bag_files), "test_roc2.zip") expect_false(file.exists(new_roc_zip_file)) - zip(new_roc_zip_file, rocrate_bag_files) + zip::zip(new_roc_zip_file, rocrate_bag_files, mode = "cherry-pick") expect_true(file.exists(new_roc_zip_file)) expect_error( temp_roc_files <- rocrateR::unbag_rocrate(new_roc_zip_file) @@ -251,4 +256,4 @@ test_that("unbag_rocrate works", { # check if the temporary directory was successfully deleted expect_false(dir.exists(tmp_dir)) -}) \ No newline at end of file +}) From 7919a9619bf3a49d07766d694ea0543bc38f23ba Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 20:43:32 +0000 Subject: [PATCH 80/82] Update links --- README.Rmd | 4 ++-- README.md | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.Rmd b/README.Rmd index 4821b6f..41e101c 100644 --- a/README.Rmd +++ b/README.Rmd @@ -272,8 +272,8 @@ We can use the function `rocrateR::is_rocrate_bag()` to verify that a given path points to a ZIP file or a directory with a valid RO-Crate bag. The expected files are -- `bagit.txt` with the BagIt [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2](definition) -- `data` directory with [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.1.2](payload) of the RO-Crate +- `bagit.txt` with the BagIt [definition](https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2) +- `data` directory with [payload](https://www.rfc-editor.org/rfc/rfc8493.html#section-2.1.2) of the RO-Crate - `manifest-[algorithm].txt` with the checksum for each file inside the `data` directory; . ```{r} diff --git a/README.md b/README.md index 9cb7ca6..3f98cd8 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ print(my_first_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-31", +#> "datePublished": "2025-11-04", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -138,7 +138,7 @@ readLines(tmp) #> [16] " \"@type\": \"Dataset\"," #> [17] " \"name\": \"\"," #> [18] " \"description\": \"\"," -#> [19] " \"datePublished\": \"2025-10-31\"," +#> [19] " \"datePublished\": \"2025-11-04\"," #> [20] " \"license\": {" #> [21] " \"@id\": \"http://spdx.org/licenses/CC-BY-4.0\"" #> [22] " }" @@ -220,7 +220,7 @@ print(my_second_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-31", +#> "datePublished": "2025-11-04", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> }, @@ -299,7 +299,7 @@ print(basic_ro_crate) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-31", +#> "datePublished": "2025-11-04", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -496,7 +496,7 @@ dir.create(tmp_dir, showWarnings = FALSE, recursive = TRUE) path_to_rocrate_bag <- basic_ro_crate |> rocrateR::bag_rocrate(path = tmp_dir) #> RO-Crate successfully 'bagged'! -#> For details, see: /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp1XrJxt/rocrate-3058b7790e4f463353d63eef7a39a68f/rocrate-74377f861ec7b87b0f160f176eebde37.zip +#> For details, see: /tmp/RtmpJDledw/rocrate-dc0b8f71bc4ab2e85c9c47e17b4c6cfc/rocrate-198ae50c2d60ae04b7a9a2da24243c5e.zip ``` ### 5.2. `rocrateR::is_rocrate_bag()` @@ -506,9 +506,9 @@ given path points to a ZIP file or a directory with a valid RO-Crate bag. The expected files are - `bagit.txt` with the BagIt - [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2](definition) + [definition](https://www.rfc-editor.org/rfc/rfc8493.html#section-2.2.2) - `data` directory with - [https://www.rfc-editor.org/rfc/rfc8493.html#section-2.1.2](payload) + [payload](https://www.rfc-editor.org/rfc/rfc8493.html#section-2.1.2) of the RO-Crate - `manifest-[algorithm].txt` with the checksum for each file inside the `data` directory; . @@ -541,7 +541,7 @@ print(basic_ro_crate_contents) #> "@type": "Dataset", #> "name": "", #> "description": "", -#> "datePublished": "2025-10-31", +#> "datePublished": "2025-11-04", #> "license": { #> "@id": "http://spdx.org/licenses/CC-BY-4.0" #> } @@ -560,11 +560,11 @@ commands: path_to_rocrate_bag_contents <- path_to_rocrate_bag |> rocrateR::unbag_rocrate(output = file.path(tmp_dir, "ROC")) #> RO-Crate bag successfully extracted! For details, see: -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp1XrJxt/rocrate-3058b7790e4f463353d63eef7a39a68f/ROC +#> /tmp/RtmpJDledw/rocrate-dc0b8f71bc4ab2e85c9c47e17b4c6cfc/ROC # create tree with the files fs::dir_tree(path_to_rocrate_bag_contents) -#> /var/folders/59/4_l6kbyj2qsczmk2b52qg_f40000gn/T//Rtmp1XrJxt/rocrate-3058b7790e4f463353d63eef7a39a68f/ROC/rocrate-74377f861ec7b87b0f160f176eebde37 +#> /tmp/RtmpJDledw/rocrate-dc0b8f71bc4ab2e85c9c47e17b4c6cfc/ROC/. #> ├── bagit.txt #> ├── data #> │ └── ro-crate-metadata.json From a1764dd3e55158fba692eff5365efa2da8dbaef5 Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 21:05:35 +0000 Subject: [PATCH 81/82] Add html to list of ignored files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e658d3..2c7b1e9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ rsconnect/ docs CRAN-SUBMISSION cran-comments.md +*.html From cea9d5c0335c673133417d838ed0becd9ec43bcd Mon Sep 17 00:00:00 2001 From: Roberto Villegas-Diaz Date: Tue, 4 Nov 2025 21:06:02 +0000 Subject: [PATCH 82/82] Generate lower resolution logo to decrease package size --- inst/R.ignore/hex-logo.R | 3 ++- man/figures/logo.png | Bin 124486 -> 46242 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/inst/R.ignore/hex-logo.R b/inst/R.ignore/hex-logo.R index 61ade27..1f4bc54 100644 --- a/inst/R.ignore/hex-logo.R +++ b/inst/R.ignore/hex-logo.R @@ -36,4 +36,5 @@ hex_logo <- function(subplot = system.file("images/ro-crate-w-text.png", } # pak::pak("emilioxavier/hexSticker") -hex_logo("inst/images/ro-crate-w-text.png", output = "inst/images/logo.png", package = "", u_size = 6.8, dpi = 600) +hex_logo("inst/images/ro-crate-w-text.png", output = "man/figures/logo_hq.png", package = "", u_size = 6.8, dpi = 600) +hex_logo("inst/images/ro-crate-w-text.png", output = "man/figures/logo.png", package = "", u_size = 3.5, dpi = 300) diff --git a/man/figures/logo.png b/man/figures/logo.png index 1c443fe3512e53ea19e52973c0194d82158900ed..e54129fcab1e3e5e7d68ac7a9152df95bb832aea 100644 GIT binary patch literal 46242 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

F}@>!a3PQC(EqtTRIxdd+WO-3HL;in&+;0qW!{ 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 SxLh~#uIeh9%7u!SVgCc`di{z3