{"id":13552897,"url":"https://github.com/AtomGraph/LinkedDataHub","last_synced_at":"2025-04-03T04:31:07.957Z","repository":{"id":37262539,"uuid":"78568544","full_name":"AtomGraph/LinkedDataHub","owner":"AtomGraph","description":"The low-code Knowledge Graph application platform. Apache license.","archived":false,"fork":false,"pushed_at":"2024-10-29T22:31:31.000Z","size":119242,"stargazers_count":493,"open_issues_count":50,"forks_count":124,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-10-30T00:39:53.599Z","etag":null,"topics":["data-driven","data-management","declarative","framework","knowledge-graph","linked-data","linked-open-data","low-code","ontology-driven-development","openid-connect","owl","platform","rdf","semantic-web","sparql","triplestore","webid","xslt"],"latest_commit_sha":null,"homepage":"https://atomgraph.github.io/LinkedDataHub/","language":"XSLT","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":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-10T19:55:03.000Z","updated_at":"2024-10-12T09:27:09.000Z","dependencies_parsed_at":"2023-12-29T16:28:20.394Z","dependency_job_id":"0c863c37-7323-4c54-a13b-9c3aeb289e1b","html_url":"https://github.com/AtomGraph/LinkedDataHub","commit_stats":{"total_commits":5739,"total_committers":4,"mean_commits":1434.75,"dds":0.0008712319219376097,"last_synced_commit":"d4cbb352e36e2e4c8569e51e26d09c7f96f42a3a"},"previous_names":[],"tags_count":100,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FLinkedDataHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FLinkedDataHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FLinkedDataHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AtomGraph%2FLinkedDataHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AtomGraph","download_url":"https://codeload.github.com/AtomGraph/LinkedDataHub/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246939190,"owners_count":20857916,"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":["data-driven","data-management","declarative","framework","knowledge-graph","linked-data","linked-open-data","low-code","ontology-driven-development","openid-connect","owl","platform","rdf","semantic-web","sparql","triplestore","webid","xslt"],"created_at":"2024-08-01T12:02:12.880Z","updated_at":"2025-04-03T04:31:05.368Z","avatar_url":"https://github.com/AtomGraph.png","language":"XSLT","readme":"# The *low-code* Knowledge Graph application platform\n\n**_LinkedDataHub_ (LDH) is open source software you can use to manage data, create visualizations and build apps on RDF Knowledge Graphs.**\n\n![LinkedDataHub screenshots](https://github.com/AtomGraph/LinkedDataHub/raw/master/screenshots.png)\n\nWhat's new in LinkedDataHub v3? Watch this video for a feature overview:\n[![What's new in LinkedDataHub v3? Feature overview](https://img.youtube.com/vi/phRL6QtVTG0/0.jpg)](https://www.youtube.com/watch?v=phRL6QtVTG0)\n\nWe started the project with the intention to use it for Linked Data publishing, but gradually realized that we've built a multi-purpose data-driven platform.\n\nWe are building LinkedDataHub primarily for:\n* researchers who need an RDF-native FAIR data environment that can consume and collect Linked Data and SPARQL documents and follows the [FAIR principles](https://www.go-fair.org/fair-principles/)\n* developers who are looking for a declarative full stack framework for Knowledge Graph application development, with out-of-the-box UI and API\n\nWhat makes LinkedDataHub unique is its completely _data-driven architecture_: applications and documents are defined as data, managed using a single generic HTTP API and presented using declarative technologies. The default application structure and user interface are provided, but they can be completely overridden and customized. Unless a custom server-side processing is required, no imperative code such as Java or JavaScript needs to be involved at all.\n\n**Follow the [Get started](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/get-started/) guide to LinkedDataHub.** The setup and basic configuration sections are provided below and should get you running.\n\n**LinkedDataHub is also available as a free AWS Marketplace product!** \u003ca href=\"https://aws.amazon.com/marketplace/pp/prodview-vqbeztc3f2nni\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/AtomGraph/LinkedDataHub/raw/master/AWS%20Marketplace.svg\" width=\"160\" alt=\"AWS Marketplace\"/\u003e\u003c/a\u003e  \nIt takes a few clicks and filling out a form to install the product into your own AWS account. No manual setup or configuration necessary!\n\n## Setup\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n### Prerequisites\n\n* `bash` shell 4.x. It should be included by default on Linux. On Windows you can install the [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10).\n* Java's [`keytool`](https://docs.oracle.com/en/java/javase/11/tools/keytool.html) available on `$PATH`. It comes with the JDK.\n* [`openssl`](https://www.openssl.org/) available on `$PATH`\n* [`uuidgen`](https://man7.org/linux/man-pages/man1/uuidgen.1.html) available on `$PATH`\n* [Docker](https://docs.docker.com/install/) installed. At least 8GB of memory dedicated to Docker is recommended.\n* [Docker Compose](https://docs.docker.com/compose/install/) installed\n\n### Steps\n\n  1. [Fork](https://guides.github.com/activities/forking/) this repository and clone the fork into a folder\n  2. In the folder, create an `.env` file and fill out the missing values (you can use [`.env_sample`](https://github.com/AtomGraph/LinkedDataHub/blob/master/.env_sample) as a template). For example:\n     ```\n     COMPOSE_CONVERT_WINDOWS_PATHS=1\n     COMPOSE_PROJECT_NAME=linkeddatahub\n     \n     PROTOCOL=https\n     HTTP_PORT=81\n     HTTPS_PORT=4443\n     HOST=localhost\n     ABS_PATH=/\n     \n     OWNER_MBOX=john@doe.com\n     OWNER_GIVEN_NAME=John\n     OWNER_FAMILY_NAME=Doe\n     OWNER_ORG_UNIT=My unit\n     OWNER_ORGANIZATION=My org\n     OWNER_LOCALITY=Copenhagen\n     OWNER_STATE_OR_PROVINCE=Denmark\n     OWNER_COUNTRY_NAME=DK\n     ```\n  3. Setup SSL certificates/keys by running this from command line (replace `$owner_cert_pwd` and `$secretary_cert_pwd` with your own passwords):\n     ```\n     ./scripts/setup.sh .env ssl $owner_cert_pwd $secretary_cert_pwd 3650\n     ```\n     The script will create an `ssl` sub-folder where the SSL certificates and/or public keys will be placed.\n  4. Launch the application services by running this from command line:\n     ```\n     docker-compose up --build\n     ```\n     It will build LinkedDataHub's Docker image, start its container and mount the following sub-folders:\n     - `data` where the triplestore(s) will persist RDF data\n     - `uploads` where LDH stores content-hashed file uploads\n     The first should take around half a minute as datasets are being loaded into triplestores. After a successful startup, the last line of the Docker log should read something like:\n     ```\n     linkeddatahub_1     | 09-Feb-2021 14:18:10.536 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [32609] milliseconds\n     ```\n  5. Install `ssl/owner/keystore.p12` into a web browser of your choice (password is the `$owner_cert_pwd` value supplied to `setup.sh`)\n     - Google Chrome: `Settings \u003e Advanced \u003e Manage Certificates \u003e Import...`\n     - Mozilla Firefox: `Options \u003e Privacy \u003e Security \u003e View Certificates... \u003e Import...`\n     - Apple Safari: The file is installed directly into the operating system. Open the file and import it using the [Keychain Access](https://support.apple.com/guide/keychain-access/what-is-keychain-access-kyca1083/mac) tool (drag it to the `local` section).\n     - Microsoft Edge: Does not support certificate management, you need to install the file into Windows. [Read more here](https://social.technet.microsoft.com/Forums/en-US/18301fff-0467-4e41-8dee-4e44823ed5bf/microsoft-edge-browser-and-ssl-certificates?forum=win10itprogeneral).\n  6. Open **https://localhost:4443/** in that web browser\n\n  ### Notes\n\n  * There might go up to a minute before the web server is available because the nginx server depends on healthy LinkedDataHub and the healthcheck is done every 20s\n  * You will likely get a browser warning such as `Your connection is not private` in Chrome or `Warning: Potential Security Risk Ahead` in Firefox due to the self-signed server certificate. Ignore it: click `Advanced` and `Proceed` or `Accept the risk` to proceed.\n    * If this option does not appear in Chrome (as observed on some MacOS), you can open `chrome://flags/#allow-insecure-localhost`, switch `Allow invalid certificates for resources loaded from localhost` to `Enabled` and restart Chrome\n  * `.env_sample` and `.env` files might be invisible in MacOS Finder which hides filenames starting with a dot. You should be able to [create it using Terminal](https://stackoverflow.com/questions/5891365/mac-os-x-doesnt-allow-to-name-files-starting-with-a-dot-how-do-i-name-the-hta) however.\n  * On Linux your user may need to be a member of the `docker` group. Add it using\n  ```\n  sudo usermod -aG docker ${USER}\n  ```\n  and re-login with your user. An alternative, but not recommended, is to run\n  ```\n  sudo docker-compose up\n  ```\n\u003c/details\u003e\n\n## Configuration\n\n\u003cdetails\u003e\n  \u003csummary\u003eClick to expand\u003c/summary\u003e\n\n  ### Base URI\n\n  A common case is changing the base URI from the default `https://localhost:4443/` to your own.\n\n  Lets use `https://ec2-54-235-229-141.compute-1.amazonaws.com/linkeddatahub/` as an example. We need to split the URI into components and set them in the `.env` file using the following parameters:\n  ```\n  PROTOCOL=https\n  HTTP_PORT=80\n  HTTPS_PORT=443\n  HOST=ec2-54-235-229-141.compute-1.amazonaws.com\n  ABS_PATH=/linkeddatahub/\n  ```\n\n  `ABS_PATH` is required, even if it's just `/`.\n\n  ### Dataspaces\n\n  Dataspaces are configured in [`config/system-varnish.trig`](https://github.com/AtomGraph/LinkedDataHub/blob/master/config/system-varnish.trig). Relative URIs will be resolved against the base URI configured in the `.env` file.\n\n_:warning: Do not use blank nodes to identify applications or services. We recommend using the `urn:` URI scheme, since LinkedDataHub application resources are not accessible under their own dataspace._\n\n  ### Environment\n\n  LinkedDataHub supports a range of configuration options that can be passed as environment parameters in `docker-compose.yml`. The most common ones are:\n\n  \u003cdl\u003e\n    \u003cdt\u003e\u003ccode\u003eCATALINA_OPTS\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eTomcat's \u003ca href=\"https://tomcat.apache.org/tomcat-9.0-doc/RUNNING.txt\"\u003ecommand line options\u003c/a\u003e\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eSELF_SIGNED_CERT\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003e\u003ccode\u003etrue\u003c/code\u003e if the server certificate is self-signed\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eSIGN_UP_CERT_VALIDITY\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eValidity of the WebID certificates of signed up users (\u003cem\u003enot the owner's\u003c/em\u003e)\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eIMPORT_KEEPALIVE\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eThe period for which the data import can keep an open HTTP connection before it times out, in ms. The larger files are being imported, the longer it has to be in order for the import to complete.\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eMAX_CONTENT_LENGTH\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eMaximum allowed size of the request body, in bytes\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eMAIL_SMTP_HOST\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eHostname of the mail server\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eMAIL_SMTP_PORT\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003ePort number of the mail server\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eGOOGLE_CLIENT_ID\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eOAuth 2.0 Client ID from Google. When provided, enables the \u003csamp\u003eLogin with Google\u003c/samp\u003e authentication method.\u003c/dd\u003e\n    \u003cdt\u003e\u003ccode\u003eGOOGLE_CLIENT_SECRET\u003c/code\u003e\u003c/dt\u003e\n    \u003cdd\u003eClient secret from Google\u003c/dd\u003e\n  \u003c/dl\u003e\n\nThe options are described in more detail in the [configuration documentation](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/reference/configuration/).\n\n  ## Reset\n\n  If you need to start fresh and wipe the existing setup (e.g. after configuring a new base URI), you can do that using\n  ```\n  sudo rm -rf data uploads \u0026\u0026 docker-compose down -v\n  ```\n\n_:warning: This will **remove the persisted data and files** as well as Docker volumes._\n\u003c/details\u003e\n\n## [Documentation](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/)\n\n* [Get started](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/get-started/)\n* [Reference](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/reference/)\n* [User guide](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/user-guide/)\n\n## [Command line interface](https://atomgraph.github.io/LinkedDataHub/linkeddatahub/docs/reference/command-line-interface/)\n\nLinkedDataHub CLI wraps the HTTP API into a set of shell scripts with convenient parameters. The scripts can be used for testing, automation, scheduled execution and such. It is usually much quicker to perform actions using CLI rather than the user interface, as well as easier to reproduce.\n\nThe scripts can be found in the [`scripts`](https://github.com/AtomGraph/LinkedDataHub/tree/master/scripts) subfolder.\n\n_:warning: The CLI scripts internally use [Jena's CLI commands](https://jena.apache.org/documentation/tools/). Set up the Jena environment before running the scripts._\n\nAn environment variable `JENA_HOME` is used by all the command line tools to configure the class path automatically for you. You can set this up as follows:\n\n**On Linux / Mac**\n\n    export JENA_HOME=the directory you downloaded Jena to\n    export PATH=\"$PATH:$JENA_HOME/bin\"\n\n## Sample applications\n\n### Third party\n\n* [KGDN](https://kgdev.net) - an open-source, collaborative project documenting RDF Knowledge Graph technologies, including RDF, SPARQL, OWL, and SHACL\n* [LDH Uploader](https://github.com/tmciver/ldh-uploader) - a collection of shell scripts used to upload files or directory of files to a LinkedDataHub instance by [@tmciver](https://github.com/tmciver)\n\n### [Demo apps](https://github.com/AtomGraph/LinkedDataHub-Apps)\n\nThese demo applications can be installed into a LinkedDataHub instance using the provided CLI scripts.\n\n_:warning: Before running app installation scripts that use LinkedDataHub's CLI scripts, set the `SCRIPT_ROOT` environmental variable to the [`scripts`](https://github.com/AtomGraph/LinkedDataHub/tree/master/scripts) subfolder of your LinkedDataHub fork or clone._ For example:\n\n    export SCRIPT_ROOT=\"/c/Users/namedgraph/WebRoot/AtomGraph/LinkedDataHub/scripts\"\n\n## How to get involved\n\n* contribute a new LDH application or modify [one of ours](https://github.com/AtomGraph/LinkedDataHub-Apps)\n* work on [good first issues](../../contribute)\n* work on the features in our [Roadmap](../../wiki/Roadmap)\n* join our [community](#community)\n\n## Test suite\n\nLinkedDataHub includes an HTTP [test suite](https://github.com/AtomGraph/LinkedDataHub/tree/master/http-tests). The server implementation is also covered by the [Processor test suite](https://github.com/AtomGraph/Processor/tree/master/http-tests).\n\n![HTTP-tests](https://github.com/AtomGraph/LinkedDataHub/workflows/HTTP-tests/badge.svg?branch=master)\n![HTTP-tests](https://github.com/AtomGraph/LinkedDataHub/workflows/HTTP-tests/badge.svg?branch=develop)\n\n## Dependencies\n\n### Browser\n\n* [Saxon-JS](https://www.saxonica.com/saxon-js/)\n* [SPARQLBuilder](https://github.com/AtomGraph/sparql-builder)\n* [OpenLayers](https://openlayers.org)\n* [Google Charts](https://developers.google.com/chart)\n\n### Java\n\n* [Jersey](https://eclipse-ee4j.github.io/jersey/)\n* [XOM](http://www.xom.nu)\n* [JavaMail](https://javaee.github.io/javamail/)\n* [Guava](https://github.com/google/guava)\n* [java-jwt](https://github.com/auth0/java-jwt)\n* [ExpiringMap](https://github.com/jhalterman/expiringmap)\n* [CSV2RDF](https://github.com/AtomGraph/CSV2RDF)\n* [Processor](https://github.com/AtomGraph/Processor)\n* [Web-Client](https://github.com/AtomGraph/Web-Client)\n\n### Docker\n\n* [nginx](https://hub.docker.com/_/nginx)\n* [varnish](https://hub.docker.com/_/varnish)\n* [atomgraph/fuseki](https://hub.docker.com/r/atomgraph/fuseki)\n* [namshi/smtp](https://hub.docker.com/r/namshi/smtp)\n\n## Support\n\nPlease [report issues](https://github.com/AtomGraph/LinkedDataHub/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\n* [linkeddatahub@groups.io](https://groups.io/g/linkeddatahub) (mailing list)\n* [linkeddatahub/Lobby](https://gitter.im/linkeddatahub/Lobby) on gitter\n* [@atomgraphhq](https://twitter.com/atomgraphhq) on Twitter\n* [AtomGraph](https://www.linkedin.com/company/atomgraph/) on LinkedIn\n","funding_links":[],"categories":["Java","framework","XSLT"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAtomGraph%2FLinkedDataHub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAtomGraph%2FLinkedDataHub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAtomGraph%2FLinkedDataHub/lists"}