Plow - The ontology package manager

Overview

Plow logo

Plow - Ontology package manager

Plow is package management solution for OWL ontologies, with support for specifying dependencies between packages via SemVer ranges.

Getting started - Installation

GUI

To install, run:

cargo install plow_gui

Prebuilt binaries are coming soon!

CLI

To install, run:

cargo install plow_cli

Prebuilt binaries are coming soon!

Repository contents

Reference implementation and registry.field33.com

We provide a reference implementation of the registry service under plow_backend_reference. The implementation documents and showcases all the REST API endpoints required for package management, but some of the functionality is only implemented in a limited fashio. E.g. it does not persist any data between process restarts, and doesn't include any authentication/authorization, making it unfit for production usage.

For production usage, we provide a hosted registry with a web UI at registry.field33.com. As the underlying codebase is strongly connected to other parts of our products, it is currently not viable for us to maintain the registry publicly, but that may change in the future.

Citing

If you use Plow in the context of a published academic piece of work, please consider citing:

TODO: Add citation upon publication

Contributing

We are happy about any contributions!

To get started you can take a look at our Github issues.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as below, without any additional terms or conditions.

License

Licensed under either of

Comments
  • Add fundamental functionality to plow cli

    Add fundamental functionality to plow cli

    Initials of the project requires a lot of changes, I'd understand if you'd only like to apply a rough review. Thanks for your patience.

    Rough summary of changes

    plow_cli

    • Error handling and reporting system implemented
    • Code base modularized
    • Sub commands are unified
    • Improvements to sub commands
    • Harriet updated

    plow_linter

    • Reform architecture
    • Implement performance improvements
    • Lay out ideas for possible future performance improvements
    • Harriet updated

    plow_package_management

    • Minor updates to types and tests to be more useful for our backend
    • Harriet updated

    plow_graphify

    • Harriet updated

    plow_ontology

    • Removed ontology initialization (for now it is part of the CLI)
    • Harriet updated

    As always thanks for your review. 🙏

    opened by alisomay 1
  • Initialization and protege functionalities.

    Initialization and protege functionalities.

    Aggregate PR for adding initialization and protege functionalities. This is meant to be the last PR with large scope and fast development. A refactoring PRs will follow and a proper CI will be implemented following this.

    opened by alisomay 0
  • Update linter with required lints for the remote plow registry

    Update linter with required lints for the remote plow registry

    Certain validations and lints are required for the standardization of fields in our plow remote registry. This PR attempts to add the initial necessary lints to resolve this issue.

    Here is the list of lints added and updated which could be found in plow_linter/src/lints directory.

    • has_rdfs_comment_manifest_context
    • has_rdfs_label_manifest_context
    • has_registry_author
    • has_registry_category
    • has_registry_keyword
    • has_registry_license
    • has_registry_license_spdx
    • has_registry_short_description
    • valid_rdfs_labels
    • valid_registry_documentation
    • valid_registry_homepage
    • valid_registry_repository

    plow_linter/tests/ directory could be also checked to understand how lints behave to different valid and invalid input.

    The lints are concerned about certain fields in plow compliant ontologies.

    An example of a compliant blank ontology file annotated with comments is given to understand the context better.

    @prefix : <http://field33.com/ontologies/@fld33/test/> .
    @prefix owl: <http://www.w3.org/2002/07/owl#> .
    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    @prefix xml: <http://www.w3.org/XML/1998/namespace> .
    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix registry: <http://field33.com/ontologies/REGISTRY/> .
    @base <http://field33.com/ontologies/@fld33/test/> .
    
    <http://field33.com/ontologies/@fld33/test/> rdf:type owl:Ontology ;
                                                                              owl:imports <http://field33.com/ontologies/@fld33/communication/> ,
                                                                                          <http://field33.com/ontologies/@fld33/organization/> ;
                                                                              
                                                                              # Optional in plow registry
                                                                              registry:canonicalPrefix "test" ;
        
                                                                              # Required in plow registry
                                                                              # Multiple authors can be specified
                                                                              # The format is like the example
                                                                              # Authors shouldn't be annotated by a language tag
                                                                              registry:author "Miles Davis <[email protected]>" ,
                                                                                                        "Joe Pass <[email protected]>" ;
         
                                                                              # Plow defines a finite set of categories to use
                                                                              # Maximum 5 categories are allowed
                                                                              # Categories shouldn't be annotated by a language tag
                                                                              registry:category "Communication" ,
                                                                                                "Organization" ,
                                                                                                "Upper Ontology";
                                                                              
                                                                              # Dependencies are optional in plow registry
                                                                              registry:dependency "@fld33/communication ^0.1.0" ,
                                                                                                  "@fld33/organization ^0.1.1" ;
                                                                              
                                                                              # Keywords could be used freely and will be used for indexing in search
                                                                              # Maximum 5 keywords are allowed
                                                                              # Keywords shouldn't be annotated by a language tag
                                                                              registry:keyword "Communication" ,
                                                                                               "Field 33 Package" ,
                                                                                               "Organization" ,
                                                                                               "Upper Ontology";
                                                                              
                                                                              # Having at least one license related annotation is required for plow 
                                                                              # Using registry:licenseSPDX is advised
                                                                              registry:license "MIT License";
                                                                              registry:licenseSPDX  "MIT";
                                                                    
                                                                              # Optional for plow registry
                                                                              registry:homepage  "https://field33.com";
                                                                              
                                                                              # Optional for plow registry
                                                                              registry:documentation  "https://field33.com";
                                                                              
                                                                              # Required for plow registry
                                                                              registry:ontologyFormatVersion "v1" ;
                                                                              
                                                                              # Required for plow registry
                                                                              registry:packageName "@fld33/test" ;
                                                                              
                                                                              # Required for plow registry
                                                                              registry:packageVersion "0.1.2" ;
                                                                              
                                                                              # Optional for plow registry
                                                                              registry:repository "https://github.com/field33/ontology-workspace/tree/main/%40fld33/test" ;
                                                                              
                                                                              # Required for plow registry, language tag required
                                                                              registry:shortDescription "A short description of the field"@en ;
                                                                              
                                                                              # Required for plow registry, language tag required
                                                                              # Will be interpreted as long description in plow
                                                                              rdfs:comment "A long description of the field."@en ;
                                                                              
                                                                              # Required for plow registry, language tag required
                                                                              # Will be interpreted as the readable title of the field in plow
                                                                              rdfs:label "My interesting field"@en .
                                                                              
    
    #################################################################
    #    Annotation properties
    #################################################################
    
    ###  http://field33.com/ontologies/REGISTRY/dependency
    registry:dependency rdf:type owl:AnnotationProperty .
    
    

    Thanks for your review in advance 🙏

    enhancement 
    opened by alisomay 0
  • Plow registry: downloadable files should be named using ontology name plus (selected) version

    Plow registry: downloadable files should be named using ontology name plus (selected) version

    I am not sure, if this repository is the right place for my request. Please move, if it isnt.

    When opening an ontology in Plow Registry (like https://registry.field33.com/field/@fld33/people/0.1.5), the file given under Download has a name which consists of random letters and numbers.

    Is it possible to use the name of the ontology plus the version I selected? For the mentioned link it would be people-0.1.5.ttl. That would make it easier in case someone starts to download and check a couple of your ontologies.

    opened by k00ni 1
  • Set up shields.io badges

    Set up shields.io badges

    Badges in READMEs can be a really good way to improve the developer experience for an ecosystem, as they can provide a consistently recognizable link to a website with more information (like the registry) in an otherwise unstructured (= of always varying structure) block of text.

    Shields.io provides the commonly used service for that (with integrations to all the popular package managers): https://shields.io/category/version

    Examples for what the badge could look like:


    This is a twin issue to https://github.com/bazel-contrib/bcr-ui/issues/29 which I want to tackle at some point. Depending on where I get around to implementing it first, I think we can benefit from the experience.

    enhancement 
    opened by hobofan 0
  • Plow init should generate varying metadata in a way that they are commented out

    Plow init should generate varying metadata in a way that they are commented out

    plow init currently generates an ontology document with all the required values prefilled to default values.

    While this certainly provides a low-friction way towards submitting the ontology, this will likely result in all those metadata fields not being changed by most ontologies, and all those packages being published by "John Doe", etc..

    opened by hobofan 0
  • Plow init generates `fieldFormatVersion`

    Plow init generates `fieldFormatVersion`

    Plow init currently generates a registry:fieldFormatVersion, which deviates from the registry:ontologyFormatVersion, which we assume at every other location in the tooling.

    opened by hobofan 0
  • Only request private index if necessary

    Only request private index if necessary

    Description

    We want to support consuming public ontologies without the need to login. However currently the private index (which requires a login) is retrieved on every plow command.

    Instead the private index should only be retrieved if a package name is encountered that cannot be found in the public index.

    enhancement 
    opened by bdart 0
Owner
Field 33
Augmenting humans in organizations to thrive in complex challenges
Field 33
basic multiple package manager

baka basic multiple package manager Docs Env baka_root_setting Windows: %USERPROFILE%/.baka/config Linux, Mac: $HOME/.baka/config baka_plugins (Just u

null 8 Dec 29, 2021
Novus - A blazingly fast and efficient package manager for windows.

Novus - A blazingly fast and efficient package manager for windows. Why Novus Swift Unlike any other package manager, Novus uses multithreaded downloads

Novus 197 Dec 18, 2022
Wally is a modern package manager for Roblox projects inspired by Cargo

Wally is a package manager for Roblox inspired by Cargo (Rust) and npm (JavaScript). It brings the familiar, community-oriented world of sharing code from other communities into the Roblox ecosystem.

Uplift Games 194 Jan 3, 2023
A shiny new package manager written in rust explicitly for gemlock/linux and it's distributions

Gem A shiny new package manager written in rust explicitly for gemlock/linux and it's distributions. List of content How to setup Systems Ubuntu Arch

Gemlock 1 Feb 22, 2022
💡 Use the right package manager by rust

n ?? Use the right package manager by rust ?? Inspired by ni Why ni is nice , but ni is based on Node. it is difficult to collaborate well with node v

SHEIN 3 Jul 24, 2023
A fast package manager for NodeJS written in Rust.

click A fast package manager for NodeJS written in Rust. How fast? Benchmark of bun vs click clean install: Based on benchmarks done with hyperfine, c

Sam 52 Oct 10, 2023
Rust package for constructing and analyzing phylogenies.

Rust-Phylogeny, a Rust library for phylogenetic trees Currently this library provides three algorithms: UPGMA and Neighbor-Joining for constructing a

Ragnar Groot Koerkamp 1 Nov 18, 2021
DWARF packaging utility, written in Rust, supporting GNU extension and DWARF 5 package formats.

thorin thorin is an DWARF packaging utility for creating DWARF packages (*.dwp files) out of input DWARF objects (*.dwo files; or *.o files with .dwo

David Wood 19 Nov 16, 2022
A little bit fast and modern Ruby version manager written in Rust

A little bit fast and modern Ruby version manager written in Rust Features Pure Rust implementation not using ruby-build Cross-platform support (macOS

Takayuki Maeda 510 Jan 5, 2023
Solidity-Compiler Version Manager

Solidity Compiler Version Manager

Rohit Narurkar 114 Jan 2, 2023
SPWN extension manager.

XTND SPWN extension manager. Important Disclaimer As this will allow any module to run as builtins, with little to no limitations, use of XTND may be

Deltara 1 Dec 16, 2021
Fast and simple PHP version manager written in rust

[WIP] phpup (PHP-up): Fast and Simple PHP version manager ⚡ Fast and simple PHP version manager, written in rust Features No requirements for system P

null 27 Dec 25, 2022
A simple clipboard manager for wayland.

Wpilman A simple clipboard manager for wayland. Installation Just compile it yourself or install the AUR package: paru -S wlipman-git # or yay -S wlip

null 3 Jan 13, 2023
Wayland clipboard manager that will make you clap 👏

Clapboard - clipboard manager that makes you clap ?? Clapboard is a simple clipboard manager for Wayland, built in Rust. It saves a history of your cl

Yo'av Moshe 18 Jan 28, 2023
VEP-like tool for sequence ontology and HGVS annotation of VCF files

Mehari Mehari is a software package for annotating VCF files with variant effect/consequence. The program uses hgvs-rs for projecting genomic variants

Berlin Institute of Health 5 Mar 31, 2023
Semi-automatic OSINT framework and package manager

sn0int sn0int (pronounced /snoɪnt/) is a semi-automatic OSINT framework and package manager. It was built for IT security professionals and bug hunter

null 1.4k Dec 31, 2022
A cryptographically verifiable code review system for the cargo (Rust) package manager.

A cryptographically verifiable code review system for the cargo (Rust) package manager.

crev - Code REView system 1.8k Jan 2, 2023
Cargo - The Rust package manager

Cargo downloads your Rust project’s dependencies and compiles your project.

The Rust Programming Language 9.5k Jan 4, 2023
basic multiple package manager

baka basic multiple package manager Docs Env baka_root_setting Windows: %USERPROFILE%/.baka/config Linux, Mac: $HOME/.baka/config baka_plugins (Just u

null 8 Dec 29, 2021
Volt - A powerful, fast and memory safe package manager for the web

Volt - A powerful, fast and memory safe package manager for the web

Volt Package Manager 811 Dec 30, 2022