Skip to main content

RO-Crate Profile Crate Creator

Polyglot library for creation of RO-Crate Profile Crates according to the official documentation, and based on the examples of profile run crate and workflow crate.

Version Downloads
Nuget Nuget
NPM NPM
PyPI PyPI

Install

.NET

#r "nuget: ROCratePCC"
<PackageReference Include="ROCratePCC" Version="1.1.0" />

JavaScript

npm i @nfdi4plants/rocratepcc

Python

pip install rocratepcc

Documentation

Python

from rocratepcc import *

# List all types which are used in this profile
types = [
    UsedType(iri = "https://schema.org/CreativeWork", name = "CreativeWork"),
    UsedType(iri = "http://www.w3.org/ns/dx/prof/Profile", name = "Profile"),
]

# List all authors of this profile
authors = [
    Author(orcid = "0000-0002-5526-71389", name = "Florian Wetzels"),
    Author(orcid = "0000-0003-1945-6342", name = "Heinrich Lukas Weil"),
]

# Version of the profile (semver if possible)
version = "1.0.0-draft.2"

# Identifier of the root data entity of the profile, if url not applicable then use "./"
id = f"https://github.com/nfdi4plants/isa-ro-crate-profile/tree/{version}/profile"

# Name of the profile
name = "ISA RO-Crate Profile"

# Description of the profile
description = "An RO-Crate profile for representing ISA data in Research Object Crates (RO-Crates). This profile defines how to represent ISA Investigation, Study, and Assay data using RO-Crate metadata."

# License by which the profile is published
license = License(iri = "https://mit-license.org/", name = "MIT License")

# List of the textual resources we use as specifications for this profile
specifications = [
    TextualResource(
        name = "ISA RO-Crate Profile description",
        file_path = "isa_ro_crate.md",
        encoding_format = "text/markdown",
        root_data_entity_id = id
    )
]

# List of all the resource descriptors. Here, only the specification is given. Other possible types
resourceDescriptors = [
    Specification(specifications)
    # Example()
    # Guidance()
    # Constraint()
]

# The root data entity of the profile
rootEntity = RootDataEntity(
        id = id,
        name = name,
        description = description,
        license = license,
        used_types = types,
        resource_descriptors = resourceDescriptors,
        authors = authors
    )

# Profile entity
profile = Profile(
        rootEntity,
        license = license
    )

# Convert the profile to a JSON-LD string
string = profile.ToROCrateJsonString(spaces = 2)

# Write the string to a file "ro-crate-metadata.json"
with open("ro-crate-metadata.json", "w", encoding="utf-8") as f:
    f.write(string)

resulting in the following ro-crate-metadata.json:

{
  "@context": "https://w3id.org/ro/crate/1.2-DRAFT/context",
  "@graph": [
    {
      "@id": "https://mit-license.org/",
      "@type": "CreativeWork",
      "name": "MIT License"
    },
    {
      "@id": "https://orcid.org/0000-0002-5526-71389",
      "@type": "Person",
      "name": "Florian Wetzels"
    },
    {
      "@id": "https://orcid.org/0000-0003-1945-6342",
      "@type": "Person",
      "name": "Heinrich Lukas Weil"
    },
    {
      "@id": "isa_ro_crate.md",
      "@type": "File",
      "name": "ISA RO-Crate Profile description",
      "encodingFormat": "text/markdown",
      "about": {
        "@id": "https://github.com/nfdi4plants/isa-ro-crate-profile/tree/1.0.0-draft.2/profile"
      }
    },
    {
      "@id": "https://schema.org/CreativeWork",
      "@type": "DefinedTerm",
      "name": "CreativeWork"
    },
    {
      "@id": "http://www.w3.org/ns/dx/prof/Profile",
      "@type": "DefinedTerm",
      "name": "Profile"
    },
    {
      "@id": "#hasSpecification",
      "@type": "ResourceDescriptor",
      "hasRole": {
        "@id": "http://www.w3.org/ns/dx/prof/role/specification"
      },
      "hasArtifact": {
        "@id": "isa_ro_crate.md"
      }
    },
    {
      "@id": "https://github.com/nfdi4plants/isa-ro-crate-profile/tree/1.0.0-draft.2/profile",
      "@type": [
        "Dataset",
        "Profile"
      ],
      "license": {
        "@id": "https://mit-license.org/"
      },
      "name": "ISA RO-Crate Profile",
      "description": "An RO-Crate profile for representing ISA data in Research Object Crates (RO-Crates). This profile defines how to represent ISA Investigation, Study, and Assay data using RO-Crate metadata.",
      "author": [
        {
          "@id": "https://orcid.org/0000-0002-5526-71389"
        },
        {
          "@id": "https://orcid.org/0000-0003-1945-6342"
        }
      ],
      "hasPart": [
        {
          "@id": "isa_ro_crate.md"
        },
        {
          "@id": "https://schema.org/CreativeWork"
        },
        {
          "@id": "http://www.w3.org/ns/dx/prof/Profile"
        }
      ],
      "hasResource": {
        "@id": "#hasSpecification"
      }
    },
    {
      "@id": "ro-crate-metadata.json",
      "@type": "CreativeWork",
      "about": {
        "@id": "https://github.com/nfdi4plants/isa-ro-crate-profile/tree/1.0.0-draft.2/profile"
      },
      "license": {
        "@id": "https://mit-license.org/"
      },
      "conformsTo": "https://w3id.org/ro/crate/1.2"
    }
  ]
}

FSharp

open ROCratePCC

let types : ResizeArray<UsedType> = ResizeArray [
    UsedType(iri = "https://schema.org/CreativeWork", name = "CreativeWork");
    UsedType(iri = "http://www.w3.org/ns/dx/prof/Profile", name = "Profile");
]

let authors : ResizeArray<Author> = ResizeArray [
    Author(orcid = "0000-0002-5526-71389", name = "Florian Wetzels");
    Author(orcid = "0000-0003-1945-6342", name = "Heinrich Lukas Weil");
]

let version = "1.0.0-draft.2"

let id = $"https://github.com/nfdi4plants/isa-ro-crate-profile/tree/{version}/profile"

let name = "ISA RO-Crate Profile"

let description = "An RO-Crate profile for representing ISA data in Research Object Crates (RO-Crates). This profile defines how to represent ISA Investigation, Study, and Assay data using RO-Crate metadata."

let license = License(iri = "https://mit-license.org/", name = "MIT License")

let specifications = ResizeArray[
    TextualResource(
        name = "ISA RO-Crate Profile description",
        filePath = "isa_ro_crate.md",
        encodingFormat = "text/markdown",
        rootDataEntityId = id
    )
]


let resourceDescriptors = ResizeArray [
    Specification(specifications) :> ResourceDescriptor
]

let rootEntity = 
    RootDataEntity(
        id = id,
        name = name,
        description = description,
        license = license,
        usedTypes = types,
        resourceDescriptors = resourceDescriptors,
        authors = ResizeArray authors
    )

let profile = 
    Profile(
        rootEntity,
        license = license
    )

let string = profile.ToROCrateJsonString(spaces = 2)

System.IO.File.WriteAllText("profile/ro-crate-metadata.json", string)

Development

Requirements

  • nodejs and npm
    • verify with node --version (Tested with v18.16.1)
    • verify with npm --version (Tested with v9.2.0)
  • .NET SDK
    • verify with dotnet --version (Tested with 7.0.306)
  • Python
    • verify with py --version (Tested with 3.12.2, known to work only for >=3.11)

Local Setup

On windows you can use the setup.cmd to run the following steps automatically!

  1. Setup dotnet tools

    dotnet tool restore

  2. Install NPM dependencies

    npm install

  3. Setup python environment

    py -m venv .venv

  4. Install uv and dependencies

    1. .\.venv\Scripts\python.exe -m pip install -U pip setuptools
    2. .\.venv\Scripts\python.exe -m pip install uv
    3. .\.venv\Scripts\python.exe -m uv pip install -r pyproject.toml --group dev

Verify correct setup with ./build.cmd runtests ✨

Metadata

Release files for rocratepcc 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rocratepcc 0.1.1
File Size Uploaded
rocratepcc-0.1.1.tar.gz 565.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rocratepcc 0.1.1
File Interpreter ABI Platform
rocratepcc-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.4 MB

Release files / rocratepcc-0.1.1.tar.gz

Download URL rocratepcc-0.1.1.tar.gz
Size 565.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8799711e91e00ad965a8373ed3d708a7db8a7714abcbe6ee4771e7979f654fe5
BLAKE2b-256 checksum
How to use checksums
27c7f3b1245db0036e092bc32e9ce52a1c56035e590f03719e890e8683eaea54
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / rocratepcc-0.1.1-py3-none-any.whl

Download URL rocratepcc-0.1.1-py3-none-any.whl
Size 862.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
db974e51c0017515267d4576ea6570f9f9428a56bbd116e3b33565d53f20fe20
BLAKE2b-256 checksum
How to use checksums
5b0dec5f9c6efe3c4f548bb556abb544bd16259177f8c3cc85fc86a69c796456
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.3

2 release files

0.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page