An Object Oriented Programming (OOP) interface for Ontology Web language (OWL) ontologies.

Overview

code GPLv3 license release

Enabling a developer to use Ontology Web Language (OWL) along with its reasoning capabilities in an Object Oriented Programming (OOP) paradigm, by providing an easy to use API, i.e., OWLOOP.

Although OWL and OOP paradigms have similar structure, there are some key differences between them; see this W3C publication for more details about the differences. Nonetheless, it is possible to use OWL along with its reasoning capabilities within applications developed in an OOP paradigm, by using the classic OWL-API. But, the usage of the classic OWL-API leaves your project with lots of boilerplate code. Therefore, the OWLOOP-API (built on top of OWL-API), reduces boilerplate code by enabling interaction with 'OWL entities' (i.e, Concept (also known as Class), Individual, Object property and Data property) as objects within the OOP paradigm. These objects are termed as Descriptors (i.e., ClassDescriptor, IndividualDescriptor, ObjectPropertyDescriptor and DataPropertyDescriptor). By using descriptor(s), OWLOOP synchronizes axioms (OWL2-DL axioms) between the OOP paradigm (your application's code) and the OWL paradigm (OWL ontology XML/RDF file(s)).

Example of a real-world system that used OWLOOP API:

This video (link) shows a smart home system recognising human activities. The system uses a network of multiple ontologies to recognise specific activities. The network of multiple ontologies was developed using OWLOOP API.

Table of Contents

  1. Reference to the publication
  2. Getting Started with OWLOOP
  3. Overview of important Java-classes (in OWLOOP) and their methods
  4. Wiki documentation
  5. Some details about OWLOOP dependencies
  6. Developers' message
  7. License

1. Reference to the Publication

OWLOOP API is a peer reviewed software published by Elsevier in its journal SoftwareX. The publication presents in detail the motivation for developing OWLOOP. Furthermore, it describes the design of the API and presents the API's usage with illustrative examples.

Please, cite this work as:

@article{OWLOOP-2021,
  title = {{OWLOOP}: {A} Modular {API} to Describe {OWL} Axioms in {OOP} Objects Hierarchies},
  author = {Luca Buoncompagni and Syed Yusha Kareem and Fulvio Mastrogiovanni},
  journal = {SoftwareX},
  volume = {17},
  pages = {100952},
  year = {2022},
  issn = {2352-7110},
  doi = {https://doi.org/10.1016/j.softx.2021.100952},
  url = {https://www.sciencedirect.com/science/article/pii/S2352711021001801}
}

2. Getting Started with OWLOOP

2.1. Prerequisites for your Operating System

2.2. Add OWLOOP dependencies to your project

First Step: Create a new project with Java as the programming language and Gradle as the build tool.

Second Step: Create a directory called lib and place the OWLOOP related jar files in it.

Third Step: Modify your build.gradle file, as follows:

  • Add flatDir { dirs 'lib' } within the repositories{} section, as shown below:
repositories {
    mavenCentral()

    flatDir {
        dirs 'lib'
    }
}
  • Add the required dependencies (i.e., owloop, amor and pellet), as shown below 👇
dependencies {
    // testCompile group: 'junit', name: 'junit', version: '4.12'

    implementation 'it.emarolab.amor:amor:2.2'
    implementation 'it.emarolab.owloop:owloop:2.1'
    implementation group: 'com.github.galigator.openllet', name: 'openllet-owlapi', version: '2.5.1'
}

It is normal that a warning like SLF4J: Class path contains multiple SLF4J bindings occurs.

Final Step: You are now ready to create/use OWL ontologies in your project/application 🔥 , by using OWLOOP descriptors in your code!.

2.3. Use OWLOOP in your project

  • This is an example code that shows how to create an OWL file and add axioms to it.
import it.emarolab.amor.owlInterface.OWLReferences;
import it.emarolab.owloop.core.Axiom;
import it.emarolab.owloop.descriptor.utility.classDescriptor.FullClassDesc;
import it.emarolab.owloop.descriptor.utility.individualDescriptor.FullIndividualDesc;
import it.emarolab.owloop.descriptor.utility.objectPropertyDescriptor.FullObjectPropertyDesc;

public class someClassInMyProject {

    public static void main(String[] args) {

        // Disabling 'internal logs' (so that our console is clean)
        Axiom.Descriptor.OntologyReference.activateAMORlogging(false);

        // Creating an object that is 'a reference to an ontology'
        OWLReferences ontoRef = Axiom.Descriptor.OntologyReference.newOWLReferencesCreatedWithPellet(
                "robotAtHomeOntology",
                "src/main/resources/robotAtHomeOntology.owl",
                "http://www.semanticweb.org/robotAtHomeOntology",
                true
        );

        // Creating some 'classes in the ontology'
        FullClassDesc location = new FullClassDesc("LOCATION", ontoRef);
        location.addSubClass("CORRIDOR");
        location.addSubClass("ROOM");
        location.writeAxioms();
        FullClassDesc robot = new FullClassDesc("ROBOT", ontoRef);
        robot.addDisjointClass("LOCATION");
        robot.writeAxioms();

        // Creating some 'object properties in the ontology'
        FullObjectPropertyDesc isIn = new FullObjectPropertyDesc("isIn", ontoRef);
        isIn.addDomainClassRestriction("ROBOT");
        isIn.addRangeClassRestriction("LOCATION");
        isIn.writeAxioms();
        FullObjectPropertyDesc isLinkedTo = new FullObjectPropertyDesc("isLinkedTo", ontoRef);
        isLinkedTo.addDomainClassRestriction("CORRIDOR");
        isLinkedTo.addRangeClassRestriction("ROOM");
        isLinkedTo.writeAxioms();

        // Creating some 'individuals in the ontology'
        FullIndividualDesc corridor1 = new FullIndividualDesc("Corridor1", ontoRef);
        corridor1.addObject("isLinkedTo", "Room1");
        corridor1.addObject("isLinkedTo", "Room2");
        corridor1.writeAxioms();
        FullIndividualDesc robot1 = new FullIndividualDesc("Robot1", ontoRef);
        robot1.addObject("isIn", "Room1");
        robot1.writeAxioms();
        
        // Saving axioms from in-memory ontology to the the OWL file located in 'src/main/resources'
        ontoRef.saveOntology();
    }
}
  • After running the above code, the OWL file robotAtHomeOntology gets saved in src/main/resources. We can open the OWL file in Protege and view the ontology.

3. Overview of important Java-classes (in OWLOOP) and their methods

Java-classes methods
Path: OWLOOP/src/.../owloop/core/

This path contains, all core Java-classes. Among them, one in particular is immediately useful, i.e., OntologyReference. It allows to create/load/save an OWL ontology file.
The following method allows to enable/disable display of internal logging:

activateAMORlogging()
The following methods allow to instantiate an object of the Java-class OWLReferences:

newOWLReferencesCreatedWithPellet()
newOWLReferencesFromFileWithPellet()
newOWLReferencesFromWebWithPellet()
The object of Java-class OWLReferences, offers the following methods:

#0000FFsaveOntology()
#0000FFsynchronizeReasoner()
#0000FFload() // is hidden and used internally
Path: OWLOOP/src/.../owloop/descriptor/utility/

This path contains the directories that contain all Java-classes that are (as we call them) descriptors. The directories are the following:
/classDescriptor
/dataPropertyDescriptor
/objectPropertyDescriptor
/individualDescriptor.
The object of a Descriptor, offers the following methods:

#f03c15add...()
#f03c15remove...()
#f03c15build...()
#f03c15get...()
#f03c15query...()
#f03c15writeAxioms()
#f03c15readAxioms()
#f03c15reason()
#f03c15saveOntology()

4. Wiki documentation

The OWLOOP API's core aspects are described in this repository's wiki:

  • Structure of the OWLOOP API project.

  • JavaDoc of the OWLOOP API project.

  • What is a Descriptor in OWLOOP?

  • Code examples that show how to:

    • Construct a type of descriptor.

    • Add axioms to an ontology by using descriptors.

    • Infer some knowledge (i.e., axioms) from the axioms already present within an ontology by using descriptors. This example also highlights the use of the build() method.

    • Remove axioms from an ontology by using descriptors.

5. Some details about OWLOOP dependencies

Please use Gradle as the build tool for your project, and include the following dependencies in your project's build.gradle file:

  • aMOR (latest release is amor-2.2): a Multi-Ontology Reference library is based on OWL-API and it provides helper functions to OWLOOP.
    • OWL-API: a Java API for creating, manipulating and serialising OWL Ontologies. We have included owlapi-distribution-5.0.5 within amor-2.2.
  • OWLOOP (latest release is owloop-2.2): an API that enables easy manipulation of OWL (Ontology Web Language) ontologies from within an OOP (Object Oriented Programming) paradigm.
    • Pellet: an open source OWL 2 DL reasoner. We have included openllet-owlapi-2.5.1 within owloop-2.2.

6. Developers' message

Feel free to contribute to OWLOOP by sharing your thoughts and ideas, raising issues (if found) and providing bug-fixes. For any information or support, please do not hesitate to contact us through this Github repository or by email.

Developed by [email protected] and [email protected] under the supervision of [email protected].

7. License

OWLOOP is under the license: GNU General Public License v3.0

You might also like...
Implemented fully documented Particle Swarm Optimization algorithm (basic model with few advanced features) using Python programming language
Implemented fully documented Particle Swarm Optimization algorithm (basic model with few advanced features) using Python programming language

Implemented fully documented Particle Swarm Optimization (PSO) algorithm in Python which includes a basic model along with few advanced features such as updating inertia weight, cognitive, social learning coefficients and maximum velocity of the particle.

A programming language written with python
A programming language written with python

Kaoft A programming language written with python How to use A simple Hello World: c="Hello World" c Output: "Hello World" Operators: a=12

A general-purpose programming language, focused on simplicity, safety and stability.
A general-purpose programming language, focused on simplicity, safety and stability.

The Rivet programming language A general-purpose programming language, focused on simplicity, safety and stability. Rivet's goal is to be a very power

Web-interface + rest API for classification and regression (https://jeff1evesque.github.io/machine-learning.docs)
Web-interface + rest API for classification and regression (https://jeff1evesque.github.io/machine-learning.docs)

Machine Learning This project provides a web-interface, as well as a programmatic-api for various machine learning algorithms. Supported algorithms: S

Karate Club: An API Oriented Open-source Python Framework for Unsupervised Learning on Graphs (CIKM 2020)
Karate Club: An API Oriented Open-source Python Framework for Unsupervised Learning on Graphs (CIKM 2020)

Karate Club is an unsupervised machine learning extension library for NetworkX. Please look at the Documentation, relevant Paper, Promo Video, and Ext

MazeRL is an application oriented Deep Reinforcement Learning (RL) framework
MazeRL is an application oriented Deep Reinforcement Learning (RL) framework

MazeRL is an application oriented Deep Reinforcement Learning (RL) framework, addressing real-world decision problems. Our vision is to cover the complete development life cycle of RL applications ranging from simulation engineering up to agent development, training and deployment.

A Research-oriented Federated Learning Library and Benchmark Platform for Graph Neural Networks. Accepted to ICLR'2021 - DPML and MLSys'21 - GNNSys workshops.

FedGraphNN: A Federated Learning System and Benchmark for Graph Neural Networks A Research-oriented Federated Learning Library and Benchmark Platform

Data & Code for ACCENTOR Adding Chit-Chat to Enhance Task-Oriented Dialogues

ACCENTOR: Adding Chit-Chat to Enhance Task-Oriented Dialogues Overview ACCENTOR consists of the human-annotated chit-chat additions to the 23.8K dialo

Official repository for
Official repository for "Action-Based Conversations Dataset: A Corpus for Building More In-Depth Task-Oriented Dialogue Systems"

Action-Based Conversations Dataset (ABCD) This respository contains the code and data for ABCD (Chen et al., 2021) Introduction Whereas existing goal-

Releases(2.1)
Owner
TheEngineRoom-UniGe
Human Robot Interaction and Artificial Intelligence Lab in Genoa, Italy.
TheEngineRoom-UniGe
CCNet: Criss-Cross Attention for Semantic Segmentation (TPAMI 2020 & ICCV 2019).

CCNet: Criss-Cross Attention for Semantic Segmentation Paper Links: Our most recent TPAMI version with improvements and extensions (Earlier ICCV versi

Zilong Huang 1.3k Dec 27, 2022
Rank 1st in the public leaderboard of ScanRefer (2021-03-18)

InstanceRefer InstanceRefer: Cooperative Holistic Understanding for Visual Grounding on Point Clouds through Instance Multi-level Contextual Referring

63 Dec 07, 2022
object recognition with machine learning on Respberry pi

Respberrypi_object-recognition object recognition with machine learning on Respberry pi line.py 建立一支與樹梅派連線的 linebot 使用此 linebot 遠端控制樹梅派拍照 config.ini l

1 Dec 11, 2021
Tooling for GANs in TensorFlow

TensorFlow-GAN (TF-GAN) TF-GAN is a lightweight library for training and evaluating Generative Adversarial Networks (GANs). Can be installed with pip

803 Dec 24, 2022
Finding all things on-prem Microsoft for password spraying and enumeration.

msprobe About Installing Usage Examples Coming Soon Acknowledgements About Finding all things on-prem Microsoft for password spraying and enumeration.

205 Jan 09, 2023
3D cascade RCNN for object detection on point cloud

3D Cascade RCNN This is the implementation of 3D Cascade RCNN: High Quality Object Detection in Point Clouds. We designed a 3D object detection model

Qi Cai 22 Dec 02, 2022
Implementation of various Vision Transformers I found interesting

Implementation of various Vision Transformers I found interesting

Kim Seonghyeon 78 Dec 06, 2022
Multi-View Radar Semantic Segmentation

Multi-View Radar Semantic Segmentation Paper Multi-View Radar Semantic Segmentation, ICCV 2021. Arthur Ouaknine, Alasdair Newson, Patrick Pérez, Flore

valeo.ai 37 Oct 25, 2022
A video scene detection algorithm is designed to detect a variety of different scenes within a video

Scene-Change-Detection - A video scene detection algorithm is designed to detect a variety of different scenes within a video. There is a very simple definition for a scene: It is a series of logical

1 Jan 04, 2022
Code for "The Box Size Confidence Bias Harms Your Object Detector"

The Box Size Confidence Bias Harms Your Object Detector - Code Disclaimer: This repository is for research purposes only. It is designed to maintain r

Johannes G. 24 Dec 07, 2022
PyTorch implementation for Partially View-aligned Representation Learning with Noise-robust Contrastive Loss (CVPR 2021)

2021-CVPR-MvCLN This repo contains the code and data of the following paper accepted by CVPR 2021 Partially View-aligned Representation Learning with

XLearning Group 33 Nov 01, 2022
Poisson Surface Reconstruction for LiDAR Odometry and Mapping

Poisson Surface Reconstruction for LiDAR Odometry and Mapping Surfels TSDF Our Approach Table: Qualitative comparison between the different mapping te

Photogrammetry & Robotics Bonn 305 Dec 21, 2022
Deep generative models of 3D grids for structure-based drug discovery

What is liGAN? liGAN is a research codebase for training and evaluating deep generative models for de novo drug design based on 3D atomic density grid

Matt Ragoza 152 Jan 03, 2023
K-Nearest Neighbor in Pytorch

Pytorch KNN CUDA 2019/11/02 This repository will no longer be maintained as pytorch supports sort() and kthvalue on tensors. git clone https://github.

Chris Choy 65 Dec 01, 2022
Sign Language Translation with Transformers (COLING'2020, ECCV'20 SLRTP Workshop)

transformer-slt This repository gathers data and code supporting the experiments in the paper Better Sign Language Translation with STMC-Transformer.

Kayo Yin 107 Dec 27, 2022
MINOS: Multimodal Indoor Simulator

MINOS Simulator MINOS is a simulator designed to support the development of multisensory models for goal-directed navigation in complex indoor environ

194 Dec 27, 2022
Implementation of [Time in a Box: Advancing Knowledge Graph Completion with Temporal Scopes].

Time2box Implementation of [Time in a Box: Advancing Knowledge Graph Completion with Temporal Scopes].

LingCai 4 Aug 23, 2022
Deep Reinforcement Learning based Trading Agent for Bitcoin

Deep Trading Agent Deep Reinforcement Learning based Trading Agent for Bitcoin using DeepSense Network for Q function approximation. For complete deta

Kartikay Garg 669 Dec 29, 2022
IOT: Instance-wise Layer Reordering for Transformer Structures

Introduction This repository contains the code for Instance-wise Ordered Transformer (IOT), which is introduced in the ICLR2021 paper IOT: Instance-wi

IOT 19 Nov 15, 2022
PyTorch implementation of MLP-Mixer

PyTorch implementation of MLP-Mixer MLP-Mixer: an all-MLP architecture composed of alternate token-mixing and channel-mixing operations. The token-mix

Duo Li 33 Nov 27, 2022