Quick start guide¶
What’s in this document?
Run GraphDB as a desktop installation¶
The easiest way to setup and run GraphDB is to use the native installations provided for the GraphDB Free edition. This kind of installation is the best option for your laptop/desktop computer. It is suitable for users, who are unsure about the existence of Java platform and want to run the application in an OS with a GUI.
On Windows¶
- Download your GraphDB
.exe
file. - Double click the application file and follow the on-screen installer prompts.
- Locate the GraphDB application on the Windows Start menu and start the database. The GraphDB Server and Workbench open at http://localhost:7200/.
On Mac OS¶
- Download the GraphDB
.dmg
file. - Double click it and get a virtual disk on your desktop. Copy the program from the virtual disk to your hard disk applications folder, and you’re set.
- Start the database by clicking the application icon. The GraphDB Server and Workbench open at http://localhost:7200/.
On Linux¶
- Download the GraphDB
.rpm
or.deb
file. - Install the package with
sudo rpm -i
orsudo dpkg -i
and the name of the downloaded package. Alternatively, you can double click the package name. - Start the database by clicking the application icon. The GraphDB Server and Workbench open at http://localhost:7200/.
Configuring GraphDB¶
Once the GraphDB database is running, a small icon appears in the Status/Menu bar. To change the configuration, click the icon and click Settings...:

All settings will be applied only after you click the Save and Restart button. To increase the maximum memory allocated by the Java process to 4GB, add -Xmx4G
.
Warning
If you set an invalid Java option parameter, GraphDB may fail to start after the application restart. The only way to solve this problem is to remove the invalid line from the file %userprofile%\AppData\Roaming\com.ontotext.graphdb.free\packager\jvmuserargs.cfg
(Windows), ~/Library/Application Support/com.ontotext.graphdb.free/packager/jvmuserargs.cfg
(Mac OS), ~/.local/com.ontotext.graphdb.free/packager/jvmuserargs.cfg
(Linux).
Stopping GraphDB¶
To stop the database simply close the GraphDB Free window.
Run GraphDB as a stand-alone server¶
The default way of running GraphDB is as a stand-alone server. The server is platform independent and it includes all recommended JVM parameters for immediate use.
Running GraphDB¶
Download your GraphDB distribution file and unzip it.
Start the GraphDB Server and Workbench interface by executing the startup script located in the $graphdb_home/bin folder:
graphdb
A message appears in your console telling you that GraphDB has been started in workbench mode. To access the Workbench, open http://localhost:7200/ in your browser.
Options¶
The startup script supports the following options:
Option | Description |
---|---|
-d |
daemonise (run in background), not available on Windows |
-s |
run in server-only mode (no workbench UI) |
-p pidfile |
write PID to <pidfile> |
-h --help |
print command line options |
-v |
print GraphDB version, then exit |
-Dprop |
set Java system property |
-Xprop |
set non-standard Java system property |
Note
Run graphdb -s
to start GraphDB in server-only mode without the web interface (no workbench). A remote workbench can still be attached to the instance.
Configuring GraphDB¶
Paths and network settings¶
The configuration of all GraphDB directory paths and network settings is read from the conf/graphdb.properties
file. It controls where to store the database data, log files and internal data. To assign a new value, modify the file or override the setting by adding -D<property>=<new-value>
as a parameter to the startup script. For example, to change the database port number:
graphdb -Dgraphdb.connector.port=<your-port>
The configuration properties can also be set in the environment variable GDB_JAVA_OPTS
, using the same -D<property>=<new-value>
syntax.
Note
The order of precedence for GraphDB configuration properties is: config file < GDB_JAVA_OPTS
< command line supplied arguments.
Java virtual machine settings¶
It is strongly recommended to set explicit values for the Java heap space. You can control the heap size by supplying an explicit value to the startup script such as graphdb -Xms10g -Xmx10g
or setting one of the following environment variables:
GDB_HEAP_SIZE
environment variable to set both the minimum and the maximum heap size (recommended).GDB_MIN_MEM
environment variable to set only the minimum heap size.GDB_MAX_MEM
environment variable to set only the maximum heap size.
For more information on how to change the default Java settings, check the instructions in the graphdb
file.
Note
The order of precedence for JVM options is: GDB_MIN_MEM
/GDB_MAX_MEM
< GDB_HEAP_SIZE
< GDB_JAVA_OPTS
< command line supplied arguments.
Stopping the database¶
To stop the database, find the GraphDB process identifier and send kill <process-id>
. This sends a shutdown signal and the database stops. If the database is run in a non-daemon mode, you can also send Ctrl+C interrupt to stop it.
Set up your license¶
GraphDB Free is available under an RDBMS-like free license. It is free to use but not open-source.
Create a repository¶
Now let’s create your first repository.
Hint
When started, GraphDB creates GraphDB-HOME/data directory as an active location. To change the directory, see Configuring GraphDB Data Directory.
Go to Setup -> Repositories.
Click Create new repository.
Enter myrepo as a Repository ID and leave all other optional configuration settings with their default values.
Tip
For repositories with more than few tens of millions of statements, see Configuring a repository.
Click the the Connect button to set the newly created repository as the repository for this location.
Use the pin to select it as the default repository.
Tip
You can also use curl
command to perform basic location and repository management through the Workbench REST API.
Load your data¶
All examples given below are based on the News sample dataset provided in the distribution folder.
Tip
You can also use public datasets such as the w3.org Wine ontology by pasting its data URL - https://www.w3.org/TR/owl-guide/wine.rdf - by Get RDF data from a URL from User data tab of the Import page.
Load data through the GraphDB Workbench¶
Load data from local files
Let’s load your data.
- Go to Import -> RDF.
- Open the User data tab and click the Upload RDF files to upload the files from the News sample dataset provided in the distribution folder.

- Click the Import button.
- Enter the Import settings in the pop-up window.

Import Settings
- Base URI: the default prefix for all local names in the file;
- Target graphs: imports the data into one or more graphs;
For more details, see Loading data using the Workbench.
- Start importing by clicking Import button.
Note
You can also import data from files on the server where the workbench is located, from a remote URL (with a format extension or by specifying the data format), from a SPARQL construct query directly, or by typing or pasting the RDF data in a text area.
Import execution
- Imports are executed in the background while you continue working on other things.
- Interrupt is supported only when the location is local.
- Parser config options are not available for remote locations.
Load data through SPARQL or RDF4J API¶
The GraphDB database also supports a very powerful API with a standard SPARQL or RDF4J endpoint to which data can be posted with cURL, a local Java client API or a RDF4J console. It is compliant with all standards. It allows every database operation to be executed via a HTTP client request.
Locate the correct GraphDB URL endpoint:
select Setup -> Repositories
click the link icon next to the repository name
copy the repository URL.
Go to the folder where your local data files are.
Execute the script:
curl -X POST -H "Content-Type:application/x-turtle" -T localfilename.ttl http://localhost:7200/repositories/repository-id/statements
where
localfilename.ttl
is the data file you want to import andhttp://localhost:7200/repositories/repository-id/statements
is the GraphDB URL endpoint of your repository.Tip
Alternatively, use the full path to your local file.
Load data through the GraphDB LoadRDF tool¶
LoadRDF is a low level bulk load tool, which writes directly in the database index structures. It is ultra fast and supports parallel inference. For more information, see the Loading data using the LoadRDF tool.
Note
Loading data through the GraphDB LoadRDF tool can be performed only if the repository is empty, e.g., the initial loading after the database was down.
Explore your data and class relationships¶
Explore instances¶
To explore instances and their relationships, navigate to Explore -> Visual graph and find an instance of interest through the Easy graph search box or from the Resource view click the Visual Graph button. The graph of the instance and its relationships is shown.

Click on a node to see a menu for the following actions
- Expand node to show its relationships or collapse to hide them if already expanded
- Click the info icon to show more info about the node. The side panel includes a short description (rdfs:comment), labels (rdfs:label), RDF rank, image (foaf:depiction) if present and all DataType properties. You can search by DataType property if you are interested in a its value.
- Focus the node to restart the graph with this instance as central one. Note that you will lose the current state of your graph.
- Delete a node to hide its relationships and remove the node itself from the graph.
Click on the settings icon for advanced graph settings. Control number of links, types and predicates to hide and show.

A side panel opens with the available settings

Create your own visual graph¶
Control the SPARQL queries behind the visual graph by creating your own visual graph configuration. To make one, click on Create graph config. Use the sample queries to guide you in the configuration.

The following parts of the graph can be configured.
- Starting point - this is the initial state of your graph.
- Search box - start with a search box to choose each time a different start resource.
- Fixed node - you may want to start exploration each time with the same resource.
- Query results - the initial config state may be the visual representation of a Graph SPARQL query result
- Graph expansion - determines how new nodes and links are added to the visual graph when the user expands an existing node. The ?node variable is required and will be replaced with the IRI of the expanded node.
- Node basics - this SELECT query controls how the type, label, comment and rank are obtained for the nodes in the graph. Node types correspond to different colours. Node rank is a number between 0 and 1 and determines the size of a node. The label is the text on top of each node and if empty, IRI local name is used. Again ?node binding is replaced with node IRI.
- Predicate label - defines what text to show for each edge IRI. The query should have ?edge variable to replace it with the edge IRI.
- Node extra - Click on the info icon to show additional properties for a node. Control what to see in the side panel. ?node variable is replaced with node IRI.
- Save your config and reload it to explore your data the way you want to see it.
Class hierarchy¶
To explore your data, navigate to Explore -> Class hierarchy. You can see a diagram depicting the hierarchy of the imported RDF classes by the number of instances. The biggest circles are the parent classes and the nested ones are their children.
Note
If your data has no ontology (hierarchy), the RDF classes will be visualised as separate circles, instead of nested ones.

Explore your data - different actions
To see what classes each parent has, hover over the nested circles.
To explore a given class, click its circle. The selected class is highlighted with a dashed line and a side panel with its instances opens for further exploration. For each RDF class you can see its local name, URI and a list of its first 1000 class instances. The class instances are represented by their URIs, which when clicked, lead to another view, where you can further explore their metadata.
The side panel includes the following:
- Local name;
- URI (Press Ctrl+C / Cmd+C to copy to clipboard and Enter to close);
- Domain-Range Graph button;
- Class instances count;
- Scrollable list of the first 1000 class instances;
- View Instances in SPARQL View button. It redirects to the SPARQL view and executes an auto-generated query that lists all class instances without LIMIT.
To go to the Domain-Range Graph diagram, double click a class circle or the Domain-Range Graph button from the side panel.
To explore an instance, click its URI from the side panel.
To adjust the number of classes displayed, drag the slider on the left-hand side of the screen. Classes are sorted by the maximum instance count and the diagram displays only the current slider value.
To administer your data view, use the toolbar options on the right-hand side of the screen.
- To see only the class labels, click the Hide/Show Prefixes. You can still view the prefixes when you hover over the class that interests you.
- To zoom out of a particular class, click the Focus diagram home icon.
- To reload the data on the diagram, click the Reload diagram icon. This is recommended when you have updated the data in your repository or you experience some strange behaviour, for example you cannot see a given class.
- To export the diagram as an .svg image, click the Export Diagram download icon.
Domain-Range graph¶
To explore the connectedness of a given class, double click the class circle or the Domain-Range Graph button from the side panel. You can see a diagram that shows this class and its properties with their domain and range, where domain refers to all subject resources and range - to all object resources.
For example, if you start from class pub:Company
, you see something like: <pub-old:Mention pub-old:hasInstance pub:Company>
<pub:Company pub:description xsd:string>
.

You can also further explore the class connectedness by clicking:
- the green nodes (object property class).
- the labels - they lead to the View resource page, where you can find more information about the current class or property.
- the slider Show collapsed predicates to hide all edges sharing the same source and target nodes.

To see all predicate labels contained in a collapsed edge, click the collapsed edge count
label, which is always in the format <count> predicates
. A side panel opens with the target node label,
a list of the collapsed predicate labels and the type of the property (explicit or implicit). You can click these labels to see the resource in the View resource page.

Administering the diagram view
To administer your diagram view, use the toolbar options on the right-hand side of the screen.

- To go back to your class in the Class hierarchy, click the Back to Class hierarchy diagram button.
- To collapse edges with common source/target nodes, in order to see the diagram more clearly, click the Show all predicates/Show collapsed predicates button. The default is collapsed.
- To export the diagram as an
.svg
image, click the Export Diagram download icon.
Class relationships¶
To explore the relationships between the classes, navigate to Explore -> Class relationships. You can see a complicated diagram showing only the top relationships, where each of them is a bundle of links between the individual instances of two classes. Each link is an RDF statement where the subject is an instance of one class, the object is an instance of another class, and the link is the predicate. Depending on the number of links between the instances of two classes, the bundle can be thicker or thinner and gets the colour of the class with more incoming links. These links can be in both directions.
In the example below, you can see the relationships between the classes of the News sample dataset provided in the distribution folder. You can observe that the class with the biggest number of links (the thickest bundle) is pub-old:Document.

To remove all classes, use the X icon.

To control which classes to display in the diagram, use the add/remove icon next to each class.

To see how many annotations (mentions) are there in the documents, click on the blue bundle representing the relationship between the classes pub-old:Document and pub-old:TextMention. The tooltip shows that there are 6197 annotations linked by the pub-old:containsMention predicate.

To see how many of these annotations are about people, click on light purple bundle representing the relationship between the classes pub-old:TextMention and pub:Person. The tooltip shows that 274 annotations are about people linked by the pub-old:hasInstance predicate.

Query your data¶
Query data through the Workbench¶
Hint
SPARQL is a SQL-like query language for RDF graph databases with the following types:
SELECT
- returns tabular results;CONSTRUCT
- creates a new RDF graph based on query results;ASK
- returns “YES”, if the query has a solution, otherwise “NO”;DESCRIBE
- returns RDF data about a resource; useful when you do not know the RDF data structure in the data source;INSERT
- inserts triples into a graph;DELETE
- deletes triples from a graph.
For more information, see the Additional resources section.
Now it’s time to delve into your data. The following is one possible scenario for searching in it.
Select the repository you want to work with, in this example News, and click the SPARQL menu tab.
Let’s say you are interested in people. Find all people mentioned in the documents from this news articles dataset.
PREFIX pub: <http://ontology.ontotext.com/taxonomy/> PREFIX pub-old: <http://ontology.ontotext.com/publishing#> select distinct ?x ?Person where { ?x a pub:Person . ?x pub:preferredLabel ?Person . ?doc pub-old:containsMention / pub-old:hasInstance ?x . }
Run a query to calculate the RDF rank of the instances based on their interconnectedness.
PREFIX rank: <http://www.ontotext.com/owlim/RDFRank#> INSERT DATA { _:b1 rank:compute _:b2. }
Find all people mentioned in the documents, ordered by popularity in the repository.
PREFIX pub: <http://ontology.ontotext.com/taxonomy/> PREFIX pub-old: <http://ontology.ontotext.com/publishing#> PREFIX rank: <http://www.ontotext.com/owlim/RDFRank#> select distinct ?x ?PersonLabel ?rank where { ?x a pub:Person . ?x pub:preferredLabel ?PersonLabel . ?doc pub-old:containsMention / pub-old:hasInstance ?x . ?x rank:hasRDFRank ?rank . } ORDER by DESC (?rank)
Find all people who are mentioned together with their political parties.
PREFIX pub-old: <http://ontology.ontotext.com/publishing#> PREFIX pub: <http://ontology.ontotext.com/taxonomy/> select distinct ?personLabel ?partyLabel where { ?document pub-old:containsMention ?mention . ?mention pub-old:hasInstance ?person . ?person pub:preferredLabel ?personLabel . ?person pub:memberOfPoliticalParty ?party . ?party pub:hasValue ?value . ?value pub:preferredLabel ?partyLabel . }
Did you know that Marlon Brando was from the Democratic Party? Find what other mentions occur together with Marlon Brando in the given news article.
PREFIX pub: <http://ontology.ontotext.com/taxonomy/> PREFIX pub-old: <http://ontology.ontotext.com/publishing#> select distinct ?Mentions where { <http://www.reuters.com/article/2014/10/06/us-art-auction-idUSKCN0HV21B20141006> pub-old:containsMention / pub-old:hasInstance ?x . ?x pub:preferredLabel ?Mentions . }
Find everything available about Marlon Brando in the database.
PREFIX pub: <http://ontology.ontotext.com/taxonomy/> PREFIX pub-old: <http://ontology.ontotext.com/publishing#> select distinct ?p ?objectLabel where { <http://ontology.ontotext.com/resource/tsk78dfdet4w> ?p ?o . { ?o pub:hasValue ?value . ?value pub:preferredLabel ?objectLabel . } union { ?o pub:hasValue ?objectLabel . filter (isLiteral(?objectLabel)) . } }
Find all documents that mention members of the Democratic Party and the names of these people.
PREFIX pub-old: <http://ontology.ontotext.com/publishing#> PREFIX pub: <http://ontology.ontotext.com/taxonomy/> select distinct ?document ?personLabel where { ?document pub-old:containsMention ?mention . ?mention pub-old:hasInstance ?person . ?person pub:preferredLabel ?personLabel . ?person pub:memberOfPoliticalParty ?party . ?party pub:hasValue ?value . ?value pub:preferredLabel "Democratic Party"@en . }
Find when these people were born and died.
PREFIX pub-old: <http://ontology.ontotext.com/publishing#> PREFIX pub: <http://ontology.ontotext.com/taxonomy/> select distinct ?person ?personLabel ?dateOfbirth ?dateOfDeath where { ?document pub-old:containsMention / pub-old:hasInstance ?person . ?person pub:preferredLabel ?personLabel . OPTIONAL { ?person pub:dateOfBirth / pub:hasValue ?dateOfbirth . } OPTIONAL { ?person pub:dateOfDeath / pub:hasValue ?dateOfDeath . } ?person pub:memberOfPoliticalParty / pub:hasValue / pub:preferredLabel "Democratic Party"@en . } order by ?dateOfbirth
Tip
You can play with more example queries from the Example_queries.rtf
file provided in the distribution folder.
Note
GraphDB also features an Autocomplete index, which offers suggestions for the URIs local names in the SPARQL editor and the View resource page.
Query data programmatically¶
SPARQL is not only a standard query language, but also a protocol for communicating with RDF databases. GraphDB stays compliant with the protocol specification and allows querying data with standard HTTP requests.
Execute the example query with a HTTP GET
request:
curl -G -H "Accept:application/x-trig"
-d query=CONSTRUCT+%7B%3Fs+%3Fp+%3Fo%7D+WHERE+%7B%3Fs+%3Fp+%3Fo%7D+LIMIT+10
http://localhost:7200/repositories/yourrepository
Execute the example query with a POST
operation:
curl -X POST --data-binary @file.sparql -H "Accept: application/rdf+xml"
-H "Content-type: application/x-www-form-urlencoded"
http://localhost:7200/repositories/worker-node
where, file.sparql
contains an encoded query:
query=CONSTRUCT+%7B%3Fs+%3Fp+%3Fo%7D+WHERE+%7B%3Fs+%3Fp+%3Fo%7D+LIMIT+10
Tip
For more information how to interact with GraphDB APIs, refer to the RDF4J and SPARQL protocols or the Linked Data Platform specifications.
Additional resources¶
- SPARQL, OWL, and RDF:
- SPARQL Overview: http://www.w3.org/TR/sparql11-overview/SPARQL Query: http://www.w3.org/TR/sparql11-query/SPARQL Update: http://www.w3.org/TR/sparql11-update