{"id":15288868,"url":"https://github.com/atomgraph/processor","last_synced_at":"2025-06-26T22:32:25.590Z","repository":{"id":29951442,"uuid":"33498018","full_name":"AtomGraph/Processor","owner":"AtomGraph","description":"Ontology-driven Linked Data processor and server for SPARQL backends. Apache License.","archived":false,"fork":false,"pushed_at":"2023-07-10T20:36:24.000Z","size":1582,"stargazers_count":59,"open_issues_count":5,"forks_count":7,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-03-26T23:04:21.911Z","etag":null,"topics":["appengine","crud","data-driven","data-processing","declarative","docker-image","framework","generic","hypermedia","knowledge-graph","ldt","linked-data","linked-data-templates","ontology-driven-development","rdf","rest","semantic-web","server","sparql"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/atomgraph/processor/","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/AtomGraph.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,"governance":null}},"created_at":"2015-04-06T18:28:45.000Z","updated_at":"2025-02-25T06:07:12.000Z","dependencies_parsed_at":"2023-10-20T18:06:07.241Z","dependency_job_id":null,"html_url":"https://github.com/AtomGraph/Processor","commit_stats":null,"previous_names":["graphity/graphity-processor"],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FProcessor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FProcessor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FProcessor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FProcessor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AtomGraph","download_url":"https://codeload.github.com/AtomGraph/Processor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248674633,"owners_count":21143760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["appengine","crud","data-driven","data-processing","declarative","docker-image","framework","generic","hypermedia","knowledge-graph","ldt","linked-data","linked-data-templates","ontology-driven-development","rdf","rest","semantic-web","server","sparql"],"created_at":"2024-09-30T15:53:53.783Z","updated_at":"2025-04-13T06:31:18.177Z","avatar_url":"https://github.com/AtomGraph.png","language":"Java","readme":"AtomGraph Processor is a server of declarative, read-write Linked Data applications. If you have a triplestore with RDF data that you want to serve Linked Data from, or write RDF over a RESTful HTTP interface, AtomGraph Processor is the only component you need.\n\nWhat AtomGraph Processor provides for users as out-of-the-box generic features:\n* API logic in a single [Linked Data Templates](https://atomgraph.github.io/Linked-Data-Templates/) ontology\n* control of RDF input quality with SPARQL-based constraints\n* SPARQL endpoint and Graph Store Protocol endpoint\n* HTTP content negotiation and caching support\n\nAtomGraph's direct use of semantic technologies results in extemely extensible and flexible design and leads the way towards declarative Web development. You can forget all about broken hyperlinks and concentrate on building great apps on quality data. For more details, see [articles and presentations](https://github.com/AtomGraph/Processor/wiki/Articles-and-presentations) about AtomGraph.\n\nFor a compatible frontend framework for end-user applications, see [AtomGraph Web-Client](https://github.com/AtomGraph/Web-Client).\n\n# Getting started\n\n* [how AtomGraph Processor works](https://github.com/AtomGraph/Processor/wiki/How-Processor-works)\n* [Linked Data Templates](https://github.com/AtomGraph/Processor/wiki/Linked-Data-Templates)\n* [installing AtomGraph Processor](https://github.com/AtomGraph/Processor/wiki/Installation)\n\nFor full documentation, see the [wiki index](https://github.com/AtomGraph/Processor/wiki).\n\n# Usage\n\n## Docker\n\nProcessor is available from Docker Hub as [`atomgraph/processor`](https://hub.docker.com/r/atomgraph/processor/) image.\nIt accepts the following environment variables (that become webapp context parameters):\n\n\u003cdl\u003e\n    \u003cdt\u003e\u003ccode\u003eENDPOINT\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003e\u003ca href=\"https://www.w3.org/TR/sparql11-protocol/\"\u003eSPARQL 1.1 Protocol\u003c/a\u003e endpoint\u003c/dd\u003e\n    \u003cdd\u003eURI\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eGRAPH_STORE\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003e\u003ca href=\"https://www.w3.org/TR/sparql11-http-rdf-update/\"\u003eSPARQL 1.1 Graph Store Protocol\u003c/a\u003e endpoint\u003c/dd\u003e\n    \u003cdd\u003eURI\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eONTOLOGY\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003e\u003ca href=\"https://atomgraph.github.io/Linked-Data-Templates/\"\u003eLinked Data Templates\u003c/a\u003e ontology\u003c/dd\u003e\n    \u003cdd\u003eURI\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eAUTH_USER\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eSPARQL service HTTP Basic auth username\u003c/dd\u003e\n    \u003cdd\u003estring, optional\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eAUTH_PWD\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eSPARQL service HTTP Basic auth password\u003c/dd\u003e\n    \u003cdd\u003estring, optional\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003ePREEMPTIVE_AUTH\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003euse premptive HTTP Basic auth?\u003c/dd\u003e\n    \u003cdd\u003e\u003ccode\u003etrue\u003c/code\u003e/\u003ccode\u003efalse\u003c/code\u003e, optional\u003c/dd\u003e\n\u003c/dl\u003e\n\nIf you want to have your ontologies read from a local file rather than their URIs, you can define a custom [location mapping](https://jena.apache.org/documentation/notes/file-manager.html#the-locationmapper-configuration-file) that will be appended to the system location mapping.\nThe mapping has to be a file in N3 format and mounted to the `/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/custom-mapping.n3` path. Validate the file syntax beforehand to avoid errors.\n\nTo enable logging, mount `log4j.properties` file to `/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j.properties`.\n\n### Examples\n\nThe examples show Processor running with combinations of\n* default and custom LDT ontologies\n* local and remote SPARQL services\n* Docker commands\n\nHowever different combinations are supported as well.\n\n#### Default ontology and a local SPARQL service\n\nThe [Fuseki example](https://github.com/AtomGraph/Processor/tree/master/examples/fuseki) shows how to run a local [Fuseki](https://jena.apache.org/documentation/fuseki2/) SPARQL service together with Processor and how to setup [nginx](https://www.nginx.com) as a reverse proxy in front of Processor. Fuseki loads RDF dataset from a file. Processor uses a built-in LDT ontology.\nIt uses the [`docker-compose`](https://docs.docker.com/compose/) command.\n\nRun the Processor container together with [Fuseki](https://hub.docker.com/r/atomgraph/fuseki) and [nginx](https://hub.docker.com/_/nginx) container:\n\n    cd examples/fuseki\n    \n    docker-compose up\n\nAfter that, open one of the following URLs in the browser and you will retrieve RDF descriptions:\n* [`http://localhost:8080/`](http://localhost:8080/) - root resource\n* [`http://localhost/`](http://localhost/) - root resource where the hostname of the Processor's base URI is rewritten to `example.org`\n\nAlternatively you can run `curl http://localhost:8080/` etc. from shell.\n\nIn this setup Processor is also available on `http://localhost/` which is the nginx host.\nThe internal hostname rewriting is done by nginx and useful in situations when the Processor hostname is different from the application's dataset base URI and SPARQL queries do not match any triples.\nThe [dataset](https://github.com/AtomGraph/Processor/blob/master/examples/fuseki/dataset.ttl) for this example contains a second `http://example.org/` base URI, which works with the rewritten `example.org` hostname.\n\n#### Custom ontology and a remote SPARQL service\n\nThe [Wikidata example](https://github.com/AtomGraph/Processor/tree/master/examples/wikidata) example shows to run Processor with a custom LDT ontology and a remote SPARQL service.\nIt uses the [`docker run`](https://docs.docker.com/engine/reference/run/) command.\n\nRun the Processor container with the Wikidata example:\n\n    cd examples/wikidata\n    \n    docker-compose up\n\nAfter that, open one of the following URLs in the browser and you will retrieve RDF descriptions:\n* [`http://localhost:8080/`](http://localhost:8080/) - root resource\n* [`http://localhost:8080/birthdays`](http://localhost:8080/birthdays) - 100 people born today\n* [`http://localhost:8080/birthdays?sex=http%3A%2F%2Fwww.wikidata.org%2Fentity%2FQ6581072`](http://localhost:8080/birthdays?sex=http%3A%2F%2Fwww.wikidata.org%2Fentity%2FQ6581072) - 100 females born today\n* [`http://localhost:8080/birthdays?sex=http%3A%2F%2Fwww.wikidata.org%2Fentity%2FQ6581097`](http://localhost:8080/birthdays?sex=http%3A%2F%2Fwww.wikidata.org%2Fentity%2FQ6581097) - 100 males born today\n\nAlternatively you can run `curl http://localhost:8080/` etc. from shell.\n\n_Note that Wikidata's SPARQL endpoint [`https://query.wikidata.org/bigdata/namespace/wdq/sparql`](https://query.wikidata.org/bigdata/namespace/wdq/sparql) is very popular and therefore often overloaded. An error response received by the SPARQL client from Wikidata will result in `500 Internal Server Error` response by the Processor._\n\n## Maven\n\nProcessor is released on Maven central as [`com.atomgraph:processor`](https://search.maven.org/artifact/com.atomgraph/processor/).\n\n# Datasource\n\nAtomGraph Processor does *not* include an RDF datasource. It queries RDF data on the fly from a SPARQL endpoint using [SPARQL 1.1 Protocol](https://www.w3.org/TR/sparql11-protocol/) over HTTP. SPARQL endpoints are provided by most RDF [triplestores](http://en.wikipedia.org/wiki/Triplestore).\n\nThe easiest way to set up a SPARQL endpoint on an RDF dataset is Apache Jena [Fuseki](https://jena.apache.org/documentation/fuseki2/) as a Docker container using our [fuseki](https://hub.docker.com/r/atomgraph/fuseki) image. There is also a number of of [public SPARQL endpoints](http://sparqles.ai.wu.ac.at).\n\nFor a commercial triplestore with SPARQL 1.1 support see [Dydra](https://dydra.com).\n\n# Test suite\n\nProcessor includes a basic HTTP [test suite](https://github.com/AtomGraph/Processor/tree/master/http-tests) for Linked Data Templates, SPARQL Protocol and the Graph Store Protocol.\n\n![master](https://github.com/AtomGraph/Processor/workflows/HTTP-tests/badge.svg?branch=master)\n![develop](https://github.com/AtomGraph/Processor/workflows/HTTP-tests/badge.svg?branch=develop)\n\n# Support\n\nPlease [report issues](https://github.com/AtomGraph/Processor/issues) if you've encountered a bug or have a feature request.\n\nCommercial consulting, development, and support are available from [AtomGraph](https://atomgraph.com).\n\n# Community\n\nPlease join the W3C [Declarative Linked Data Apps Community Group](http://www.w3.org/community/declarative-apps/) to discuss\nand develop AtomGraph and declarative Linked Data architecture in general.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatomgraph%2Fprocessor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatomgraph%2Fprocessor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatomgraph%2Fprocessor/lists"}