{"id":44880480,"url":"https://github.com/cetic/ors","last_synced_at":"2026-02-17T16:04:09.715Z","repository":{"id":41142884,"uuid":"121539899","full_name":"cetic/ORS","owner":"cetic","description":"Ontology Repository Services","archived":false,"fork":false,"pushed_at":"2018-11-27T10:28:21.000Z","size":3129,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-04-13T09:20:25.610Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cetic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-14T17:30:22.000Z","updated_at":"2024-02-07T12:03:12.000Z","dependencies_parsed_at":"2022-09-09T21:21:03.482Z","dependency_job_id":null,"html_url":"https://github.com/cetic/ORS","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/cetic/ORS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cetic%2FORS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cetic%2FORS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cetic%2FORS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cetic%2FORS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cetic","download_url":"https://codeload.github.com/cetic/ORS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cetic%2FORS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549235,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-17T16:04:07.669Z","updated_at":"2026-02-17T16:04:09.706Z","avatar_url":"https://github.com/cetic.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ontology Repository Services\n\nThe Ontology Repository Services (ORS) is a tool for generating web services for storing and managing information of a domain and its metadata.\nThe information stored in ORS is based on a formal data model that can be designed and built using an OWL-RDF ontology model. \nThe repository provides a RESTful web services API that acts as a back-end for Web-UI components and enables complex queries on the stored data. \nThe REST API services are designed to assist discovery, interlinking and exchange of the stored information. \n\nThe Ontology Repository core and its REST API are designed to be domain independent. \nOne can easily extend or customize the stored data model without requiring any source code changes on the ORS. \nAddtionally the generated web service REST API can be easily extended and customised according to the use case requirements.\n\n## 1 Features\n\n### 1.1 Supported Features\n\n* Building the Data Model from the Ontology formal description (OWL) using the [ORS-Protege-plugin](https://github.com/cetic/ORS-Protege-plugin).\n    - Easily update the Data Model by changing the OWL description \n\t- Generic code (not bound to ontology concepts)  does not need to be changed  \n* Web Services REST API for the RDF-Repository\n* Support for complex queries independently of the Data model using a totally generic querying schema.\n* Easily extensible web service API for customizing the repository according to project needs.\n* Support for knowledge-base (ontology and data) reasoning using the Jena RDFS and Transitive reasoenrs. Support for more reasoners will be added in future releases.\n* Support for RDF4J repository and ONTOP plugin for accessing individuals from relational databases.\n* Configurable serialization of documents to XML or JSON.\n* Generated schema for Frontend support.\n* Importing graphs from JSON-LD.\n* Exporting graphs to JSON-LD.\n\n## 2 Architecture\n\nThe ORS consists of the following services and supporting porjects: \n* The core Ontology Repository Services project that consists of the ORS WS Application, the RDF repository and SPARQL server. \n* The [ORS-Protege-plugin](https://github.com/cetic/ORS-Protege-plugin) component that generates the model from the ontology.\n* The [ORS-GUI](https://github.com/cetic/ORS-GUI) project which is the component that provides the frontend services.\n\nThe following architecture diagram provides a component view of the ORS.\n\n![alt text](https://github.com/cetic/ORS/blob/master/src/resources/ORS-20181123.png \"ORS Architecture\")\n\n### 2.1 The WS Application \n\nAllows the management of domain information and exposes a RESTful interface. The service exchanges with its clients XML documents (support for other serialization formats, such as JSON, will be added) according to the schema that is defined by the XSD document. The WS Application accepts RESTful requests and provides methods that store domain data, receive one specific data item in JSON/XML, search for data in the given domain by providing an JSON/XML query and delete requests.  This application uses the Jena API to submit requests to the Fuseki Application and is composed of:\n1. The RDF Convertor component that uses Jena library to convert the model to RDF.\n2. The RDF parser component that converts RDF to Data model, also uses Jena.\n3. The Rest Services component that provides WS services and resources.\n4. The Document Services component that handles the json-ld import/export operations.\n\n### 2.2 The RDF repository\n\nThe Apache Jena Application is the interface to the RDF repository. This application accepts Jena requests from the WS Application that can be a query, a request to add an RDF item, to update an item, etc. It also exposes a SPARQL endpoint with REST interface that allows querying the repository directly using SPARQL queries.\nThe Jena Application as well as the WS Application are both integrated into the same web service container (back-end container).\n\nThe ORS has been developed and tested to use two alternative RDF repoisotries, the Fuseki Repository and the RDF4J Repository. It is foreseen to add support for the Jena TDB repository.\n\n### 2.3 Libraries and Technologies\n\n* Apache Jena (http://jena.apache.org). A free and open source Java framework for building Semantic Web and Linked Data applications.\n* Apache Jena Fuseki (http://jena.apache.org/documentation/fuseki2).\n* RDF4J Repository (http://rdf4j.org) with ONTOP plugin (https://github.com/ontop/ontop)\n* Jersey framework (http://jersey.java.net). A JAX-RS API implementation and framework for developing RESTful web services\n* JSONLD-Java component (https://github.com/jsonld-java/jsonld-java) for handling json-ld documents\n\n### 2.4 License \n\nCopyright © CETIC 2018, www.cetic.be \n\nAuthors: Nikolaos Matskanis, Fabian Steels\n\nThe ORS is free open source software available under the Apache v2 license. See the [LICENSE](https://github.com/cetic/ORS/blob/master/LICENSE) file.\n\n### 2.5 Releases\n\n#### Release 0.4 - 23 November 2018\n\n* New features include:\n* Improved GUI support\n* Support for more RDF types\n* Improvements in POST operations\n* Import/export of JSON-LD operations\n* Graph URI management operations\n* Delete/update operatons\n\n\n#### Release 0.3 - 18 April 2018\n\n* New features include:\n* ORS-Protege-plugin support\n* Improved GUI support\n* Hierarchical views of the Classes\n* Support for more RDF types\n* Improvements in POST operations\n\n#### Release 0.2 - 20 February 2018\n\nFirst public release of ORS at tag v0.2.\n* GET operations of individuals by Class name and by URI\n* POST operations of individuals\n* Custom user queries\n* Fuseki and RDF4J repositories\n* Ontop plugin support for mapping and accessing individuals data in an RDBMS\n* Reasoner support\n\n#### Release 0.5 - Planned for December 2018\n\n* Include protege-plugin in this project\n\n## 3 Build \u0026 Deploy\n\nThe procedure for building an ORS project is as follows:\n1. Deploy servlet container\n\t- Tomcat: http://tomcat.apache.org/tomcat-8.5-doc/\n2. Deploy the repository \n\t- Fuseki: https://jena.apache.org/documentation/fuseki2/\n\t- RDF4J : http://docs.rdf4j.org/\n3. Optionally Load Ontology in the repository\n\t- by following instructions in repository documentation.\n4. Generate Ontology POJOs using ORS-Protege-Plugin\n5. Configuration\n\t- repository deployment configuration\n6. Build ORS \u0026 generate project\n7. Deployment of generated project.\n\n### 3.1 Directory structure\n\nThe top level structure of ORS is:\n\n src/  \t-\u003e the sources\n\n src/generated -\u003e generated sources and resources\n\n src/main -\u003e generic sources \n \n src/resources -\u003e configuration resources\n \n### 3.2 POJO generation\n\n* From OWL: Use the [ORS-Protege-plugin](https://github.com/cetic/ORS-Protege-plugin) \n\nNOTE: Class names of POJOS must follow the java class name conventions and rules (for example cannot use reserved java names). If conventions and rules are not followed the POJOs will not be used correctly in the generated project or not at all! This is likely to affect the names used in OWL classes.\n\n### 3.3 Configuration\n\nRepository deployment configuration\n\nThe configuration file 'src/main/resources/config.properties' contains the configuration of (templates are available for fuseki and RDF4J repositories)\n* Repositorty Endpoints:\n\t- rdfDataEndpoint = http://[host]:[port]/fuseki/[dataset]/data\n \t- rdfDataEndpointUpdate = http://[host]:[port]/fuseki/[dateset]/update\n \t- rdfDataEndpointQuery = http://[hotst]:[port]/fuseki/[dataset]?query\n* repositoryModel -\u003e repository serialisation model class. Use the ones in the templates\n* reasoner -\u003e reasoner type. Currently supporting the jena default reasoners: \n \t- 'RDFS' value for RDFSReasoner\n \t- 'Transitive' value for TransitiveReasoner \n\n### 3.4 Build ORS \u0026 generate project\n\n \u003emvn clean package\n\n \u003ecd target/ors_project\n\n \u003emvn package\n\n### 3.5 Deployment\n\nThe webservices have been tested primarily with Apache Tomcat/8.5\n\nAfter compiling the sources of 'ors_project' you will find inside its target directory a `war` file named `repository.war`\nThe last step is to deploy the generated war by importing it into the servlet container (e.g. tomcat 8).\n\n### 3.6 Using the REST API (with examples) \n\n\n#### 3.6.1 Get Requests\n\n* Get all individuals of a certain concept (Pizza):\n\n\u003eGET http://[host]:[port]/repository/api/resource/Pizza\n\n* Get an individual of a certain concept by URI:\n\n\u003eGET http://[host]:[port]/repository/api/resource/Pizza?id=http://www.example.org/margarita1 \n\n#### 3.6.2 POST of new Individual with an example\n\nFor posting new Individuals on the repository for this redirent-simple example:\n\nPOST at the endpoint http://[host]:[port]/repository/api/resource/Pizza\nWith a JSON message body an example is given bellow.\n```json\n{\n    \"typeClass\": \"Margarita\",\n    \"type\": [\n      \"http://example.org/pizza#Margarita\"\n    ],\n    \"id\": \"http://example.org/margarita1\",\n    \"name\":\"Margarigta\"\n}\n```\n\n#### 3.6.3 Making a Query with an example \n\nFor making a complex query client applications can use the schema defined in [query.xsd](https://github.com/cetic/ORS/blob/master/model-resources/generated-sources/query.xsd).\nFor building the query applications can retireve the available predicates:\n\nGET http://[host]:[port]/repository/api/query/predicates\n\nand fields: \n\nGET http://[host]:[port]/repository/api/query/fields\n\nAnd one of the operators currently supported: {textsearch, in, not in }\n\nGET http://[host]:[port]/repository/api/query/operators\n\nOn the endpoint http://[host]:[port]/repository/api/query\n\nPUT with message body:\n\n```json\n{\n\"field\": \"http://example.org/pizza#Pizza\",\n\"filter\": {\n\t\"expression\": {\n\t\t\"predicate\": \"http://www.example.org/pizza#name\",\n\t\t\"operator\": \"textsearch\",\n\t\t\"value\": \"Margarita\"\n\t\t}\n\t}\n}\n```\n\n### 3.7 ORS GUI\n\nFor feature status and instructions see [ORS-GUI](https://github.com/cetic/ORS-GUI)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcetic%2Fors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcetic%2Fors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcetic%2Fors/lists"}