=Paper=
{{Paper
|id=Vol-2722/quweda2020-paper-2
|storemode=property
|title=Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores
|pdfUrl=https://ceur-ws.org/Vol-2722/quweda2020-paper-2.pdf
|volume=Vol-2722
|authors=Lars Gleim,Tim Holzheim,István Koren,Stefan Decker
|dblpUrl=https://dblp.org/rec/conf/semweb/GleimHKD20
}}
==Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores==
Automatic Bootstrapping of GraphQL Endpoints for
RDF Triple Stores
Lars Gleim1 , Tim Holzheim1 , István Koren1 , and Stefan Decker1,2
{gleim@dbis,tim.holzheim@,koren@dbis,decker@dbis}.rwth-aachen.de
1
Databases and Information Systems, RWTH Aachen University, Germany
2
Fraunhofer FIT, Sankt Augustin, Germany
Abstract. GraphQL is a query language for graph-structured Web APIs, increas-
ingly popular among Web developers and recently explored as an alternative query
language for Linked Data and its underlying RDF data model. However, to date,
the deployment of available GraphQL processors for RDF data requires users to
have intricate knowledge of Semantic Web technologies, such as SPARQL and
SHACL, as well as the schema of the underlying RDF data.We present Ultra-
GraphQL (UGQL), an open source tool enabling the automatic bootstrapping of
GraphQL endpoints for existing RDF triple stores, based on an adaptable SPARQL
schema extraction, mapping and query translation approach. By automatically
generating CRUD mutations for each object type, UGQL further enables write
access to RDF data. UGQL thus allows developers with limited or no knowledge
of Semantic Web technologies to read and write RDF data using plain GraphQL,
eliminating dependencies on third-party schema definitions. By effectively low-
ering the entry barrier for working with Linked Data, it has the potential to be a
ground-breaker for Semantic Web technologies.
Keywords: Linked Data Querying · Web of Data · Web Engineering
1 Introduction
As the overall amount of social, machine and transactional data generated and collected
on the Web continues to grow rapidly, Linked Data and Semantic Web technologies
play an increasingly important role in managing data in practical applications. For
instance, the Industrial Internet of Things [1] promises to improve interoperability and
easy integration of data silos [2] by providing semantically adequate and context-aware
data. However, the Resource Description Framework (RDF) [3] data model of Linked
Data and SPARQL [4] are unfamiliar to most developers [5]. The descriptive structure
of SPARQL queries, distinct from more popular query languages such as SQL, as well
as the respective query results, are criticized for containing unnecessary metadata and
carrying duplicate information [6], often requiring additional parsing or transformation
steps to allow for their usage in Web applications [7]. Additionally, in the context of
mobile application development, the structure and size of the result should be as compact
and small as possible, since network bandwidth and computational power are limited [8].
Overall, these challenges limit the practical adoption of Linked Data queried through
SPARQL, as depicted in Figure 1a).
Copyright © 2020 for this paper by its authors. Use permitted under Creative Commons License Attribution 4.0 International (CC BY 4.0).
2 Lars Gleim et al.
User (a) RDF Store
SPARQL
(b) manual schema extraction
>
setup
GraphQL SPARQL
GQL Adapter
JSON
(c) automatic schema extraction
GraphQL
JSON-LD UltraGraphQL SPARQL
Fig. 1: Three modes of Linked Data querying: (a) direct SPARQL queries, (b) GraphQL
queries via a GraphQL adapter and (c) GraphQL queries via UGQL
In contrast, GraphQL [9] has been specifically designed for mobile and Web applica-
tions. It features a tree-like structure, allowing for the traversal of the underlying graph.
The syntax is mirrored by the result, reducing additional transformation, data redundancy
and size compared to SPARQL [10]. GraphQL endpoints typically provide a schema
introspection endpoint, supporting query auto-completion, based on a schema grammar
with object type and field (property) definitions. An in-depth introduction to GraphQL
can be found in [11]. Notably, popular GraphQL implementations are not directly suited
for linked data applications, since they typically implement neither RDF compatible
data serializations, nor global identifiers by default, rendering them incompatible with
fundamental Semantic Web principles.
Recently, several publications have explored combining GraphQL with RDF com-
patible serializations [12,13,14,15,16]. However, those approaches require significant
knowledge of Semantic Web technologies for their deployment and usage, or involve
manual setup steps that limit their usage with third-party data sources, as illustrated
in Figure 1b). To address this issue, we propose the fully automatic bootstrapping, i.e.
setup and configuration, of GraphQL endpoints for RDF triple stores, as illustrated in
Figure 1c), thus lowering the entry barrier to Linked Data for developers without prior
experience with Semantic Web technologies and allowing to query existing RDF triple
stores using GraphQL without manual setup steps.
Our work comprises the following contributions: an overview of related works ex-
ploring GraphQL as a query language for RDF (Section 2), an approach enabling the
fully automatic bootstrapping of GraphQL endpoints for RDF triple stores (Section 3),
an open source implementation thereof, called UGQL1 (Section 4), based on Hyper-
GraphQL [16], and a performance evaluation of this implementation (Section 5). We
conclude with a summary of our findings and an outlook in Section 6.
1
https://git.rwth-aachen.de/i5/ultragraphql
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 3
2 Related Work
The popularity of GraphQL in the Web engineering community has recently prompted
several investigations into the integration of Semantic Web principles and general com-
patibility with Linked Data in the form of RDF data. Hereby, a principal challenge
is the schemaless nature of RDF and the ability of users to dynamically create their
own schema encodings, which makes it difficult to create a universal approach to make
Linked Data queryable through GraphQL, which by default provides a static data schema
(GQLS). We give an overview of approaches in the following, extending prior work by
Taelman et al. [17].
Farré et al. introduced the GraphQL Metamodel (GQLM) [12] and corresponding
RDF vocabulary, which allows for dataset enrichment with annotations, mapping RDF
and RDFS concepts to GraphQL primitives. Based on these manual annotations, a
GraphQL endpoint and corresponding data fetchers can be automatically generated.
However, it requires both access to the underlying triple store and a modification of its
data, as well as a deep understanding of the employed RDF ontologies and the GraphQL
data model. This limits the general applicability of the approach, especially for usage
with third-party triple stores.
Morph-GraphQL (MGQL) [18] is an approach that does not modify the data and
generates the data fetchers from provided OBDA mappings (R2RML/RML), allowing
the automatic generation of GraphQL endpoints for tabular datasets. The mapping is
limited to the R2RML mapping vocabulary and is used to translate GraphQL queries to
SQL to avoid the materialization of the data in RDF. RDF data is therefore not queryable
with MGQL.
In contrast, GraphQL-LD (GQLD) [13] employs an ad-hoc query translation ap-
proach. It transforms a given GraphQL query to a corresponding SPARQL query by
employing a user-provided semantic JSON-LD context [19], which maps defined key-
words in the query to resource identifiers in the dataset. Since the semantic context is
provided with each query, the adapter may be used with arbitrary triple stores. However,
introspection becomes impossible since the adapter is oblivious to the data’s schema.
Subsequently, users are required to have detailed knowledge of the data schema of the
underlying triple store, as well as a decent understanding of Semantic Web principles in
general to define the required context object. GQLD query responses are plain JSON
objects but may be interpreted as JSON-LD using the user-provided context object.
The commercial graph store Stardog [14] implements a hybrid approach, in which
a data schema is optional. A GraphQL schema may be defined either manually, or
be automatically bootstrapped from a provided RDFS and OWL ontology. It is then
used by the Stardog endpoint to provide a GraphQL schema introspection endpoint,
validate queries with the given typing information, optionally define custom translations
of RDF values to GraphQL values and limit the user-accessible parts of the graph to
the exposed schema. The automatic schema transformation is not configurable and
limited to a predefined RDFS/OWL subset. If no schema is provided, introspection is
not possible and no data validation or access control is enforced. The GraphQL query
evaluation is based on the assumption, that the object at the query root refers to a type,
while all other names refer to predicates. Additionally, a number of custom GraphQL
directives are introduced in order to support several more advanced features such as
4 Lars Gleim et al.
Table 1: Overview of GraphQL to RDF tools – ‘(X)’ denotes partial support
Features GQLM MGQL GQLD Stardog TopBraid HGQL UGQL
[12] [18] [13] [14] [15] [16]
Automatic Schema Extraction (X) (X) - (X) (X) - X
Schema Introspection X X - (X) X X X
RDF-interpretable Results - - X - - X X
Filtering and Ordering - - X X X (X) X
Federated Query Support - - X - - X X
Mutation Support - - - - X - X
License None Apache MIT Commercial Commercial Apache Apache
filters and bindings. Notably, the handling of namespaced RDF predicates may require
an additional understanding of SPARQL concepts or the structure of the underlying
triple store. Results are provided as plain JSON and are not RDF-interpretable.
TopBraid [15] is another commercial product that enables querying RDF data using
GraphQL. It tightly integrates schema definition and validation with SHACL shapes [20].
A GraphQL schema may either be automatically generated from an existing set of
SHACL shapes or vice versa. TopBraid supports the semi-automatic creation of SHACL
shapes from RDFS/OWL ontologies [21], which may in turn be used to generate a
GraphQL schema from them. Datasets that use a different encoding or only a subset of
the mapped vocabulary will lead to an incomplete schema and therefore a query may not
be able to retrieve all available data [22]. Because of the required SHACL enrichment,
the dataset must be fully accessible and modifiable by the developer; it thus can not be
used for third-party triple stores [23]. The created SHACL shapes are used to validate any
interaction with the triple store. Besides schema generation and schema introspection,
TopBraid notably also supports GraphQL mutations, i.e. modifications to the underlying
triple store through automatically generated CRUD operations, including corresponding
types for the result and input of those functions. All approaches introduced up until here
also support the filtering and ordering of the results. Lastly, query results are returned in
plain JSON format and thus are not RDF-interpretable.
Finally, the Java-based open source project HyperGraphQL (HGQL) [16] is manually
configured using a directive-annotated GraphQL schema, similar to both StarDog and
TopBraid. It associates each type and field in the schema with a corresponding URI and
supports the federated querying of multiple RDF triple stores. Only the types and fields
defined in this HyperGraphQL Schema (HGQLS) are retrievable through GraphQL [24].
Based on the extended HGQLS, HGQL creates a GraphQL schema, query fields for
all object types of the schema, and data fetchers for all schema entities. To assign each
schema entity a responsible service, every type and field in the schema is extended with
a directive linking to the responsible service. HGQL then supports schema introspection,
as well as basic filtering and ordering operations and returns results using the JSON-LD
format (i.e., including a semantic context object), so that the data can be interpreted as
fully compliant RDF data.
While all described approaches provide viable tools to support querying RDF data
sources using GraphQL, they simultaneously require a decent command of Semantic
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 5
Web principles and technologies, manual setup or knowledge of the structure of the data
to be queried. In general, this limits their applicability to unknown data, ad-hoc data
exploration and third-party data sources. The fully automatic bootstrapping of GraphQL
endpoints for RDF triple stores remains an open challenge. Table 1 summarizes the
relevant features of the described approaches (differentiating between no, partial and full
support respectively). The last column introduces the set of features implemented by our
work UltraGraphQL (UGQL), which we will present in the following.
3 Automatic GraphQL Bootstrapping
In order to simplify the usage and deployment of Linked Data GraphQL endpoints, we
automate the setup and configuration through the introduction of a bootstrapping phase,
consisting of an initial schema extraction and summarization based on a given dataset
and a subsequent mapping of the extracted schema to a GraphQL schema configuration.
We first detail the two steps of the bootstrapping procedure illustrated in Figure 2,
before describing our implementation UltraGraphQL and its usage in more detail.
3.1 Schema Extraction and Summarization
RDF is by design a schemaless data model but allows for the flexible definition of custom
schema semantics using a variety of ontologies. Notable examples include RDFS and
OWL [21], which are commonly used to formalize class semantics and relations thereof,
but a large variety of schema encoding approaches exists in practice. Therefore, we strive
to support a commonly used subset of RDFS and OWL by default, while allowing the
user to adapt the schema extraction if additional terms are necessary.
An early approach to schema extraction by Matono et al. [25] employs a relatively
minimal set of concepts to approximate the full data schema, specifically rdfs:Class,
rdfs:Property, rdfs:subClassOf and rdfs:subPropertyOf, in the context of search indexing.
Florenzano et al. [26], Lohmann et al. [27,28], Dudáš et al. [29] and Benedetti et
al. [30,31] follow similar approaches to determine classes and properties, either through
their instantiation in the dataset, or their explicit concept annotation, however, they
mainly focus on schema extraction for data structure visualization. Kellou-Menouer
et al. [32] propose an approximate schema discovery approach based on hierarchical
clustering instead of data annotations.
ex:bob a ex:Person; ex:Person a rdfs:Class. type ex_Person
ex:name "Bob"; ex:Address a rdfs:Class. implements ex_Person_Interface
ex:address ex:addr_a. ex:name a rdf:Property; @service(id: "dataset"){
schema:domainIncludes ex:Person; ex_name: [String] @service(id: "dataset")
ex:addr_a a ex:Address; summarize schema:rangeIncludes rdfs:Literal. Map to UGQLS ex_address: [ex_Address] @service(id: "dataset")
ex:street "Main street". ex:address a rdf:Property; }
schema:domainIncludes ex:Person;
schema:rangeIncludes ex:Address. type ex_Address
ex:street a rdf:Property; implements ex_Address_Interface
schema:domainIncludes ex:Address; @service(id: "dataset"){
schema:rangeIncludes rdfs:Literal. ex_street: [String] @service(id: "dataset")
}
SPARQL Service
"dataset"
Fig. 2: Two phases of GraphQL bootstrapping: Schema summarization & mapping
6 Lars Gleim et al.
RDF RDFS Schema.org OWL
subPropertyOf domainIncludes equivalentClass sameAs
Property
Class subClassOf rangeIncludes equivalentProperty
Fig. 3: RDF vocabulary employed in the extracted data schema
As outlined in Section 2, TopBraid [33] supports the semi-automated creation of
SHACL data shapes from OWL and RDFS ontologies, which in turn can then be
interpreted as data schema. Stardog [14] directly interprets OWL and RDFS ontologies
as data schemas, regardless of their actual use in the data. Ontology2GraphQL [34]
follows a similar approach to create an HGQLS configuration from ontologies, following
the ICDD (Information Container for Data Drop) standard [35].
To ensure that the automatically extracted schema includes only types and fields
instantiated in the respective RDF data sources, we recently proposed a schema extraction
and summarization approach [36], which allows for the flexible extraction of instantiated
schema from a given RDF data set through configurable SPARQL 1.1 path queries.
We adopt this approach to ensure that only the instantiated data schema is extracted,
leaving out ontological concepts that are defined but never used. The extracted schema
is then expressed using a fixed RDF vocabulary as depicted in Figure 3, such that the
subsequent GraphQL schema mapping can be limited to those concepts. Other semantic
concepts that are used in the data but not included in the extraction vocabulary are
eventually accessible through extracted schema. For example, rdf:List is a rdfs:Class
and is therefore queryable as an object with rdf:first and rdf:rest as fields. The approach
further summarizes defined schema concept equivalences, enabling cross dataset and
cross ontology query resolution. To provide support for multiple RDF backend stores,
the extraction query is simultaneously enriched with service-specific information and
each service is queried separately. This extracted data schema can then be used for the
automatic generation of a corresponding GQLS, using a suitable schema mapping. The
quality of the extracted data heavily depends on the chosen extraction query and mapping
and may require adjustment to the underlying RDF data.
3.2 Schema Mapping
In order for a GraphQL endpoint to provide schema introspection capabilities, a pre-
defined GQLS is required. Therefore all primitives of the previously fixed vocabulary
depicted in Figure 3 are aligned with corresponding ones in GQLS, as summarized in
Table 2. Fundamentally, classes in RDF are mapped to object types in GraphQL, while
RDF properties become GraphQL fields of those object types which may occur as part
of their RDF domain. The output types of these fields are analogously defined by the
property’s range, i.e., String for literal values or the object types corresponding to the
defined classes. 2 If multiple ranges are defined for a property in the data schema, a
2
https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/docs/schema_mapping.md
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 7
Table 2: Overview of the mapping between RDF and UGQL
RDF UGQL
Class Object Type + Interface Type
Property Field
Domain Domain(Object) of Field
Range Output Type of Field
Literal String
SubClassOf Interface Type + implements
SubPropertyOf Add Domain and Output Type of Sub-Property to Super-Property
EquivalentClass Mutual implements + directive
EquivalentProperty Merging Domain and Output Type of Both Fields + directive
corresponding GraphQL interface type is generated, combining all acceptable atomic
types. Inspired by the usage of prefixes in SPARQL, the names of generated schema
entities may use namespace abbreviations to increase their readability.
To express the extracted subclass and equivalence relationships between schema
entities, we employ GraphQL interfaces. For each object type, a corresponding interface
type is defined, which is then implemented by the object type itself (in compliance
with RDFS’s semantics that all classes are a subclass of themselves) and all of its
subclasses. The equivalence relation between classes is then expressed as a mutual
subclass relationship (following OWL semantics) and mapped to a mutual interface
implementation. Since GQLS provides no primitive to express relations between fields,
we materialize subproperty and equivalence relations. Hence, if a given field occurs
on an object type, all of its super-properties are added as well and each field’s output
types are extended to include the range or its super-properties. Property equivalence is
analogously modeled as a mutual sub-property relationship. Accounting for frequent
misuse [37], we further treat OWL sameAs relations in the extracted schema analogously
to equivalence definitions. As seen by the equivalence relations, a perfect mapping
to GQL is not possible since GQL has a limited set of supported features, resulting
in schema features that are natively not supported by GraphQL. To circumvent this
limitation, the mapping materializes the unsupported features to allow query writing
without any further knowledge and shifting the underlying logic to the query translation.
3.3 Automatic GraphQL to SPARQL translation
After generating a GQLS configuration from the extracted data schema using the above
mapping, we can now deploy an adapter instance to handle incoming GraphQL queries
during the translation phase. Figure 4 illustrates a concrete example of a query requesting
information about a person and the corresponding JSON-LD response returned by the
UGQL adapter. Depending on the underlying UGQLS, the query is translated to SPARQL
queries covering the distribution of data across triple stores as defined in the UGQLS. 3
The number of generated queries depends on the structure of the query in correlation
3
https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/docs/translation_phase.md
8 Lars Gleim et al.
with the distribution of triple stores on the queried entities. The results are then merged,
creating a unified result across all supported triple stores and enriched with contextual
information about the IRIs of the queried entities. Given concepts for schema extraction,
mapping and translation, we detail the realization of UGQL and its usage in the following.
4 UltraGraphQL Bootstrapping
To simplify the deployment of GraphQL endpoints for RDF triple stores, we present
UltraGraphQL (UGQL). Extending the features and codebase of HyperGraphQL [16],
UGQL is an open source adapter supporting a fully automatic bootstrapping process
based on a flexible and configurable SPARQL schema extraction, mapping and query
translation approach. UGQL further supports elaborate data filtering and ordering, as well
as GraphQL mutations, by automatically generating corresponding mutator functions
for the GQLS types and fields. As such, to the best of our knowledge, it is not only
the first available tool supporting fully automatic bootstrapping but also the first such
open source tool to support mutations. UGQL thus enables developers without prior
knowledge of data schema or Semantic Web technologies in general to read and write
Linked Data using GraphQL.
The software architecture of UGQL, illustrated in Figure 5, is designed to mirror
the two distinct phases bootstrapping and translation described in the previous section.
Green boxes indicate existing work reused from HGQL, orange boxes show adapted prior
work and red boxes point to entirely novel components, as described in the following.
During the initial bootstrapping phase, an endpoint configuration provided in step 1
determines the automatic data schema extraction from the underlying RDF triple stores in
step 2. The extracted data schema is then mapped to an UltraGraphQL schema (UGQLS)
in step 3, which is cached and may either be manually adapted if needed or automatically
regenerated at any time. The UGQL schema extends HGQLS by supporting unions,
interfaces, and multiple services per schema entity. Therefore, any valid HGQLS is
a valid UGQLS. Both schema extraction query and mapping phases are configurable,
allowing to modify and extend the schema to be extracted from the data as well as the
mapping of RDF vocabulary terms to GraphQL concepts. Detailed documentation of the
UGQLS syntax and options can be found in the project repository1 .
For the translation phase, the generated UGQL schema is passed to the UGQL
instance to initialize the GraphQL endpoint in step 4. At this point, the UGQL adapter is
GraphQL UGQL JSON-LD
{
ex_Person: [
{ "ex_name": ["Bob"],
"ex_age": ["42"],
ex_Person(limit:1){ "ex_relatedWith": [{
ex_name "ex_name": "Alice"
ex_age }]
ex_relatedWith{ ],
QL
ex_name "@context":{
SP
AR
AR
SP
QL
"ex_Person": "http://example.org/Person",
}
SP ARQL
"ex_name": "http://example.org/name",
} "ex_age": "http://example.org/age",
} "ex_relatedWith": "http://example.org/relatedWith"
}
}
Fig. 4: Querying multiple RDF stores through UGQL
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 9
Bootstrapping 2. SPARQL Schema Query
Schema Extraction Schema Mapping
Endpoint
config Mapping
Config
Mapping
Config
1. Input Endpoints
Services SPARQL
Query 3. Results RDF
Schema
UGQL
Schema
User/Client Transla�on Instance initializer
4. Setup GraphQL endpoint 9. Query
GraphQL UGQL 8. Query
Schema
Add Queries
Schema
Evaluation
6. Validation & Mutations
GraphQL Query
Query
5. Query 7. Transform Processing
Query Handler
submission
Query Transformer
GraphQL UGQL endpoint UGQL
Mutation
5.1 Mutation + 5.3 Handover Schema
GraphQL schema
submission SelectionSet 10. Results
Components
GraphQL SPARQL Exis�ng
JSON-LD Query Query
GraphQL Response Adapted
{} Mutation Handling
New
Transformer
5.2 Execute Mutation
11. Results
Fig. 5: Control flow through UltraGraphQL’s software components
able to accept GraphQL requests. Upon query submission (step 5), it is first validated
for compliance with the GraphQL schema (step 6) before being transformed into a
corresponding SPARQL query using additional HGQLS information (step 7). Subse-
quently, it is executed against the respective underlying SPARQL endpoints (steps 8–10).
Analogously, mutation requests (5.1) are validated by a mutation handler before being
executed directly against the underlying triple stores (step 5.2 via SPARQL Update). The
mutation action is only executed at one triple store; a mutation SelectionSet is executed
against all triple stores. If successful, the resulting query (after mutation) is then passed
to the regular GraphQL query handler for further processing as before (step 5.3). Finally,
the SPARQL response is transformed into a valid GraphQL response in JSON-LD format
and returned to the user (step 11). Further details on UGQL’s advanced features such as
support for multiple endpoints, mutations and filtering and ordering can be found in the
project documentation1 .
5 Performance Evaluation
To measure the performance of UGQL, we conducted manual and quantitative evalu-
ations of the proposed schema mapping process and its applicability, as well as com-
parative qualitative and quantitative evaluations of UGQL properties such as query
size, execution time, and response size during translation, versus the baseline of HGQL
(v1.0.3) and plain SPARQL queries. Instructions to reproduce our results, all data, queries
and code employed, may be found in our project repository4 . All practical experiments
were conducted on a machine running Ubuntu 18.04 with 16GB RAM on an Intel Core
4
https://git.rwth-aachen.de/i5/ultragraphql/-/tree/master/evaluation
10 Lars Gleim et al.
(a) 5 properties per class with range String or a (b) 100 classes with 5 properties each and n ran-
random Object Type domly defined Property or Class equivalences
in total
Fig. 6: Quantitative evaluation of the schema mapping execution time
i5-5300U with hyper-threading enabled. After an initial warm-up period, each test was
repeated 100 times and the results averaged. In the following, we structure our evaluation
according to the concept section.
5.1 Bootstrapping Evaluation
Since the schema extraction was only slightly adjusted to include rdfs:Literal range
information in the schema, we refer to a corresponding evaluation in our prior work [36]
and focus on the remaining mapping process in this evaluation.
To ensure the qualitative correctness of the mapping process as described in Sec-
tion 3.2, the GQLS generation was first verified using corresponding unit tests, as
documented in the project repository5 , and then manually validated for correctness with
different data schemas. We further quantitatively evaluated the runtime of the generation
process in two experiments, controlling the impact of schema size, i.e., the number of
classes and properties, and the number of relations between classes: (a) the number of
classes and properties was increased with each step with String as the range for one test
case and a random class for the other test case, (b) a schema with 100 classes and five
properties per class was used and in each step one equivalence relation depending on the
test case was added to evaluate the influence of the equivalence relations. The results,
depicted in Figure 6, indicate that the time to generate the mapping depends primarily on
the size of the schema, and less on specific relations between these entities. Even though
rapid schema mapping is only of limited importance for the usability of UGQL since
it only affects the bootstrapping process during deployment, the measured generation
runtime for a schema with 100 classes and a total amount of 500 fields remain below the
responsiveness threshold [38] of 300ms and are likely orders of magnitude faster than a
manual GQLS mapping process. As such, our evaluations confirm that UGQL fulfills
our initially defined bootstrapping requirements and allows for the automated generation
5
https://git.rwth-aachen.de/i5/ultragraphql/-/tree/master/docs/evaluation
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 11
of GraphQL schema configurations, eliminating the need for manual user interaction. In
the next section, we evaluate the performance of UGQL in the translation phase.
5.2 Translation Evaluation
To evaluate UGQL’s performance in the translation phase, we compare its runtime, query
and result sizes to HGQL (v1.0.3) and plain SPARQL queries on various tasks. Similar to
our evaluation of the bootstrapping phase, we first conduct a qualitative evaluation based
on a limited number of fixed queries, and second a quantitative evaluation, subsequently
querying for a) an increasing number of properties on a given entity and b) increasing
query depth. We employ an Apache Jena Fuseki6 (v3.7.0) in-memory RDF store to serve
as SPARQL endpoint throughout the evaluation.
For the qualitative evaluation, we execute 4 manually crafted queries7 against a
dataset8 with 9974 triples, 1300 distinct subjects, 8 unique properties and 2 unique
classes. Starting with a UGQL query as a reference, a corresponding HGQL query
was derived by adapting the entity naming to its requirements, and the SPARQL query
was directly generated by HGQL. UGQL and HGQL were both configured with the
same schema that was extracted using UGQL’s bootstrapping process, merely manually
limited to features supported by both softwares. UGQL was then deployed in two
configurations, the first with the dataset loaded into an internal in-memory store and the
second with the external Fuseki server, to measure the effect of the additional HTTP
communication. HGQL used the same external Fuseki server. SPARQL was evaluated
both with the common JSON response format and a more compact CSV representation.
The results in Table 3 show that the size of UGQL queries is consistently significantly
smaller than that of the respective SPARQL query. Similarly, the size of UGQL’s and
HGQL’s results shows a 59–81% reduction compared to the SPARQL JSON baseline,
and between 41% reduction and 112% increase compared to SPARQL’s CSV response
format, which is however harder to parse on the client-side and therefore less applicable
to the intended use-case. The size reduction of GraphQL responses results from both a
more compact JSON structure compared to SPARQL’s response format and the merging
of redundant information into lists. The reductions in size however come at the cost of a
significantly increased response time by up to an order of magnitude, comparing UGQL
Fuseki with the SPARQL JSON baseline in case of query 1. For reasonably sized results
(query 1–3), the response time however remained well below the human responsiveness
threshold [38] of 300ms and therefore acceptable for our intended use case scenario.
The increase in execution time from HGQL to UGQL can be explained by extended type
checking, introduced by added features like interfaces and equivalence relations requiring
additional type checks during the query translation for any query entity. Furthermore, the
GraphQL library employed in the HGQL and UGQL code base was identified as a main
cause of overhead by introducing various internal transformations of the results during
query response generation. It is thus clear to us that a direct result build-up, i.e., without
relying on the GraphQL library used internally, would perform significantly faster and is
left for future work.
6
https://jena.apache.org/documentation/fuseki2/
7
https://git.rwth-aachen.de/i5/ultragraphql/-/tree/master/evaluation/queries/one_service
8
https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/evaluation/data/raw/persons_and_cars.ttl
12 Lars Gleim et al.
Table 3: Qualitative comparison of UGQL, HGQL and SPARQL
Metric Query UGQL HGQL SPARQL
Standalone Fuseki Fuseki CSV JSON
1 64 B 68 B 168 B
2 78 B 82 B 280 B
Query Size
3 187 B 202 B 260 B
4 155 B 160 B 258 B
1 30.1 KB 17.4 KB 73.3 KB
2 10.4 KB 4.9 KB 33.4 KB
Result Size
3 5.7 KB 8.1 KB 22.6 KB
4 2.5 MB 4.7 MB 13 MB
1 139 ms 180 ms 88.4 ms 10 ms 19 ms
Latency / 2 68.1 ms 103 ms 50.9 ms 8 ms 14.5 ms
Response Time 3 48.3 ms 64.3 ms 42.7 ms 7.3 ms 13.2 ms
4 3,530 ms 4,640 ms 2,970 ms 240 ms 715 ms
For the quantitative evaluation, we measure the impact of query growth on the
response time and query result size, both in terms of the number of queried fields and
the tree depth of the query. To analyze the effect of the tree depth of the query, i.e., the
influence of nested queries, we iteratively request all persons and all other persons they
are related with over up to n (up to 50) hops from a dataset9 with 50 persons in total,
each of which is the subject of one ex:relatedWith relation to another random one of
them. To analyze the effect of the number of queried fields, we query all persons together
with the first n (up to 50) associated fields from a dataset10 of 1000 persons with 1000
fields with a random literal value of length ten each.
The results, depicted in Figure 7, indicate that UGQL appears to add an approximately
constant multiplicative factor of execution, i.e., response time overhead in both scenarios.
UGQL further consistently returns an approximately constant multiplicative factor
smaller result sizes then SPARQL with JSON result format, but similarly approximately
constant multiplicative factor larger result sizes then SPARQL with CSV result format.
Both execution time and response size further increase approximately linearly with the
number of queried fields for all approaches and execution time appears to correlate
strongly with overall result size in all cases. Nevertheless, with an overhead factor of
approximately 3, query depth has a significantly larger impact on UGQL’s execution
time overhead over plain SPARQL then the number of fields queried with a factor of
approximately 2. Manual investigation revealed a majority of the overhead to be caused
by the final result transformation in the GraphQL library used internally by HGQL
and UGQL, taking up 63, 4% of the whole execution time in case of the last query
of the growing depth test. This finding further supports the notion that a direct result
transformation could significantly reduce overhead and therefore response times in
future work. Overall, UGQL is particularly well-suited for usage in applications with
9
https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/evaluation/data/nested_person_data.ttl
10
https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/evaluation/data/growing_field_data.ttl
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 13
Growing Depth of Nested Queries
Query Execution Time Query Result Size
Execution Time (in s) 0.6 SPARQL 300 SPARQL
SPARQL CSV SPARQL CSV
UGQL UGQL
Size (in kB)
0.4 UGQL 200 UGQL
Standalone Standalone
0.2 100
0.0 0
0 10 20 30 40 50 0 10 20 30 40 50
Number of Nested Fields Number of Nested Fields
Growing Number of Fields
8
Query Execution Time Query Result Size
SPARQL 3000 SPARQL
Execution Time (in s)
6 SPARQL CSV SPARQL CSV
UGQL UGQL
Size (in kB)
UGQL 2000 UGQL
4 Standalone Standalone
2 1000
0 0
0 10 20 30 40 50 0 10 20 30 40 50
Number of Queried Fields Number of Queried Fields
Fig. 7: Impact of query growth on response time and result size
typically small result sizes, as it is able to resolve such queries with a latency under
the human responsiveness threshold. In conjunction with automatic schema generation
and bootstrapping and the implemented extensions over HGQL, UGQL provides users
who are unfamiliar with Semantic Web technologies a simple and responsive query
endpoint to access RDF data with the benefit of structured and reduced query results.
It is therefore also particularly suited for applications in mobile computing or Web
development scenarios.
6 Discussion and Conclusion
In this paper, we presented a conceptual design and tool support to automatically boot-
strap GraphQL endpoints for existing RDF triple stores. The main argument for such an
adapter is that RDF and SPARQL are verbose and unfamiliar to most Web developers,
while GraphQL query language is becoming increasingly popular with them. This is
due to its suitability for resource-constrained mobile devices and developer-friendliness
by introspection capabilities often bundled with service API endpoints. It is especially
advantageous if developers are not entirely aware of the exact structure of the data
they are querying. In contrast, querying RDF data requires detailed knowledge of the
underlying schema in order to write queries at all. Another criticism regarding SPARQL
results is that they contain too much metadata and redundant information, resulting in
an increased data exchange and additional computational costs. In contrast, GraphQL
allows the explicit specification of the required data fields and employs a more con-
densed tree-shaped result format. As such, it is better suited for mobile applications,
since it results in reduced data exchange and computational cost. Even though existing
approaches introduced in Section 2 allow to query RDF data with GraphQL, they all need
a predefined schema, schema-enhanced dataset or prior knowledge of the data structure
to function properly. Due to the schemaless nature of RDF, frequent changes can occur,
14 Lars Gleim et al.
making manual schema generation tiresome and nearly impossible to manually provide
for large and dynamic datasets.
To this end, we introduced UltraGraphQL, a fork of HypherGraphQL extended
with the capability to automatically generate a GraphQL schema for existing RDF
stores, as well as additional data filtering, ordering and mutation capabilities. The on-
demand schema summarization of RDF datasets, using adaptable SPARQL queries,
allows extracting the instantiated schema of the dataset, enabling for querying RDF
data without prior knowledge of the underlying data structure. We proposed a flexible
mapping approach enabling the automatic generation of a UGQLS configuration based
on the extracted schema. Furthermore, the feature set of HGQL was extended to support
ontological equivalence relations and support for multiple services per schema entity.
Summarizing the schema of multiple services into one UGQL schema allows to query
the endpoint without knowing the location of the data. In addition to the automatic
bootstrapping, HGQL was extended with GraphQL mutation capabilities, providing an
introspection-supported interface for data alteration. Notably, this enables developers
without knowledge of Semantic Web technologies to independently and automatically
bootstrap GraphQL endpoints to read and write Linked Data, even for frequently chang-
ing triple stores.
The evaluation has shown that in most cases, UGQL results in a 59–81% response
size reduction compared to the SPARQL JSON baseline, while only introducing a
tolerable single-digit factor of response time overhead. Notably, the latency remained
well below the human responsiveness threshold of 300ms for our representative sample
queries. The reduced query and result sizes increase the efficiency of RDF data in mobile
applications by reducing the amount of transmitted data and computational cost of data
conversion. We therefore encourage providers of RDF triple stores to use our tool to
significantly increase the usability of their offerings for mobile and web developers.
Some future work remains to be solved. First of all, we are currently preparing a
user study as quantitative assessment for our claim to improve usability for developers.
On the one hand, we plan to ask developers familiar with SPARQL to recreate some
queries with GraphQL and rate the gains or overheads. On the other hand, we want to
evaluate with web developers on how natural the generated interfaces feel. Regarding
performance, our measurements indicates that the response time overhead of UGQL may
be significantly reduced by eliminating redundant transformations in the internally used
GraphQL library, potentially cutting response times in half. Secondly, mutation support
could be enhanced to support live schema updates by analyzing the input of mutations,
enabling the modification of types and fields at runtime. Lastly and most importantly,
we are currently preparing a user study complementing our conducted performance
evaluations, to validate the claimed promise of making RDF triple stores more accessible
for Web and mobile application developers via GraphQL.
Overall, we are convinced that the presented open source tool is a valuable addition to
the Semantic Web toolset. As GraphQL continues to gain popularity among developers,
UltraGraphQL is ideally positioned to unfold the true potential of semantically enriched
data in various application areas.
Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores 15
Acknowledgments. Funded by the Deutsche Forschungsgemeinschaft (DFG, German
Research Foundation) under Germany’s Excellence Strategy – EXC-2023 Internet of
Production – 390621612.
References
1. J. Pennekamp, R. Glebke, M. Henze, T. Meisen, C. Quix, R. Hai, et al., “Towards an In-
frastructure Enabling the Internet of Production,” in Proceedings - 2019 IEEE International
Conference on Industrial Cyber Physical Systems, ICPS 2019, 2019.
2. L. Gleim, J. Pennekamp, M. Liebenberg, M. Buchsbaum, P. Niemietz, S. Knape, et al.,
“FactDAG: Formalizing Data Interoperability in an Internet of Production,” IEEE Internet of
Things Journal, vol. 7, no. 4, pp. 3243–3253, 2020.
3. D. Wood, M. Lanthaler, and R. Cyganiak, “RDF 1.1 Concepts and Abstract Syntax.” W3C,
2014.
4. A. Seaborne and S. Harris, “SPARQL 1.1 Query Language.” W3C, 2013.
5. D. Booth, “Toward Easier RDF.” W3C Workshop on Web Standardization for Graph Data,
2019.
6. P. Lisena, A. Meroño-Peñuela, T. Kuhn, and R. Troncy, “Easy Web API Development with
SPARQL Transformer,” in The Semantic Web – ISWC 2019, pp. 454–470, Springer Interna-
tional Publishing, 2019.
7. P. Lisena and R. Troncy, “Transforming the JSON Output of SPARQL Queries for Linked
Data Clients,” in Companion Proceedings of the The Web Conference 2018, WWW ’18,
pp. 775–780, 2018.
8. W. Van Woensel, S. Casteleyn, E. Paret, and O. De Troyer, “Transparent Mobile Querying
of Online RDF Sources Using Semantic Indexing and Caching,” in Web Information System
Engineering – WISE 2011, pp. 185–198, Springer Berlin Heidelberg, 2011.
9. Facebook Inc., “GraphQL. Working Draft,” 2020.
10. G. Brito, T. Mombach, and M. T. Valente, “Migrating to GraphQL: A Practical Assessment,” in
2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering
(SANER), pp. 140–150, 2019.
11. O. Hartig and J. Pérez, “Semantics and complexity of GraphQL,” in Proceedings of the 2018
World Wide Web Conference, pp. 1155–1164, 2018.
12. C. Farré, J. Varga, and R. Almar, “GraphQL Schema Generation for Data-Intensive Web
APIs,” in Model and Data Engineering, pp. 184–194, Springer International Publishing, 2019.
13. R. Taelman, M. Vander Sande, and R. Verborgh, “GraphQL-LD: Linked Data Querying with
GraphQL,” in Proceedings of the 17th International Semantic Web Conference, pp. 1–4, 2018.
14. Stardog Union, “Stardog 7: The Manual.” https://www.stardog.com/docs/#_graphql_queries,
2020.
15. TopQuadrant, “Updating RDF Graphs with GraphQL.” https://www.topquadrant.com/
technology/graphql/graphql-mutations/.
16. Semantic Integration Ltd., “HyperGraphQL Git Respository.” https://github.com/
hypergraphql/hypergraphql, 2018.
17. R. Taelman, M. Vander Sande, and R. Verborgh, “Bridges between GraphQL and RDF,” in
W3C Workshop on Web Standardization for Graph Data, 2019.
18. D. Chaves-Fraga, F. Priyatna, A. Alobaid, and O. Corcho, “Exploiting Declarative Mapping
Rules for Generating GraphQL Servers with Morph-GraphQL,” International Journal of
Software Engineering and Knowledge Engineering, vol. 30, no. 06, pp. 785–803, 2020.
19. M. Lanthaler, M. Sporny, and G. Kellogg, “JSON-LD 1.0.” W3C rec., 2014.
20. D. Kontokostas and H. Knublauch, “Shapes Constraint Language (SHACL).” W3C rec., 2017.
16 Lars Gleim et al.
21. W3C OWL Working Group, “OWL 2 Web Ontology Language.” https://www.w3.org/TR/
owl2-overview/, 2012.
22. I. Polikoff, “From OWL to SHACL in an automated way.” https://www.topquadrant.com/
from-owl-to-shacl-in-an-automated-way/, 2018.
23. H. Knublauch, D. Allemang, and S. Steyskal, “SHACL Advanced Features.” https://www.w3.
org/TR/shacl-af/.
24. Semantic Integration Ltd., “HyperGraphQL.” https://www.hypergraphql.org/, 2018.
25. A. Matono, T. Amagasa, M. Yoshikawa, and S. Uemura, “An Indexing Scheme for RDF and
RDF Schema based on Suffix Arrays,” in Proceedings of SWDB’03, pp. 151–168, 2003.
26. F. Florenzano, D. Parra, J. L. Reutter, and F. Venegas, “A Visual Aide for Understanding
Endpoint Data,” in Proceedings of the Second International Workshop on Visualization and
Interaction for Ontologies and Linked Data co-located with the 15th International Semantic
Web Conference, VOILA@ISWC, vol. 1704, pp. 102–113, 2016.
27. S. Lohmann, V. Link, E. Marbach, and S. Negru, “Extraction and Visualization of TBox
Information from SPARQL Endpoints,” in Proceedings of the 20th International Conference
on Knowledge Engineering and Knowledge Management (EKAW 2016), vol. 10024 of LNAI,
pp. 713–728, Springer, 2016.
28. M. Weise, S. Lohmann, and F. Haag, “LD-VOWL: Extracting and Visualizing Schema
Information for Linked Data,” Visualization and Interaction for Ontologies and Linked Data
(VOILA! 2016), p. 120, 2016.
29. M. Dudáš, V. Svátek, and J. Mynarz, “Dataset Summary Visualization with LODSight,” in
International Semantic Web Conference, pp. 36–40, Springer, 2015.
30. F. Benedetti, S. Bergamaschi, and L. Po, “Online Index Extraction from Linked Open Data
Sources,” in Proceedings of the Second International Workshop on Linked Data for Informa-
tion Extraction (LD4IE 2014) co-located with the 13th International Semantic Web Conference
(ISWC 2014), pp. 9–20, 2014.
31. F. Benedetti, S. Bergamaschi, and L. Po, “Visual Querying LOD sources with LODeX,” in
Proceedings of the 8th International Conference on Knowledge Capture, p. 12, ACM, 2015.
32. K. Kellou-Menouer and Z. Kedad, “Schema Discovery in RDF Data Sources,” in International
Conference on Conceptual Modeling, pp. 481–495, Springer, 2015.
33. TopQuadrant, “Querying RDF Graphs with GraphQL.” https://www.topquadrant.com/graphql/
graphql-queries.html, 2017.
34. J. Werbrouck, “Ontology2GraphQL.” https://github.com/JWerbrouck/Ontology2GraphQL,
2019.
35. J. Werbrouck, M. Senthilvel, J. Beetz, and P. Pauwels, “Querying Heterogeneous Linked
Building Data with Context-expanded GraphQL Queries,” in Proceedings of the 7th Linked
Data in Architecture and Construction Workshop, vol. 2389, pp. 21–34, 2019.
36. L. C. Gleim, M. R. Karim, L. Zimmermann, O. Kohlbacher, H. Stenzhorn, S. Decker, and
O. Beyan, “Enabling ad-hoc reuse of private data repositories through schema extraction,”
Journal of Biomedical Semantics, vol. 11, no. 1, p. 6, 2020.
37. P.-H. Paris, “Assessing the Quality of owl:sameAs Links,” in The Semantic Web: ESWC 2018
Satellite Events, pp. 304–313, Springer International Publishing, 2018.
38. J. Nielsen, Usability Engineering. San Francisco, CA, USA: Morgan Kaufmann Publishers
Inc., 1994.