<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Lars</forename><surname>Gleim</surname></persName>
							<email>gleim@dbis</email>
							<idno type="ORCID">0000-0002-3550-1847</idno>
							<affiliation key="aff0">
								<orgName type="department">Databases and Information Systems</orgName>
								<orgName type="institution">RWTH Aachen University</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Tim</forename><surname>Holzheim</surname></persName>
							<email>tim.holzheim@</email>
							<idno type="ORCID">0000-0002-3550-1847</idno>
							<affiliation key="aff0">
								<orgName type="department">Databases and Information Systems</orgName>
								<orgName type="institution">RWTH Aachen University</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">István</forename><surname>Koren</surname></persName>
							<email>koren@dbis</email>
							<idno type="ORCID">0000-0003-1350-6732</idno>
							<affiliation key="aff0">
								<orgName type="department">Databases and Information Systems</orgName>
								<orgName type="institution">RWTH Aachen University</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Stefan</forename><surname>Decker</surname></persName>
							<email>decker@dbis.rwth-aachen.de</email>
							<idno type="ORCID">0000-0001-6324-7164</idno>
							<affiliation key="aff0">
								<orgName type="department">Databases and Information Systems</orgName>
								<orgName type="institution">RWTH Aachen University</orgName>
								<address>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
							<affiliation key="aff1">
								<orgName type="institution">Fraunhofer FIT</orgName>
								<address>
									<settlement>Sankt Augustin</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Automatic Bootstrapping of GraphQL Endpoints for RDF Triple Stores</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">727FAE5E28BD2D1BB5F2109A3623F3A6</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T02:55+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Linked Data Querying</term>
					<term>Web of Data</term>
					<term>Web Engineering</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>GraphQL is a query language for graph-structured Web APIs, increasingly 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 lowering the entry barrier for working with Linked Data, it has the potential to be a ground-breaker for Semantic Web technologies.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>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 <ref type="bibr" target="#b0">[1]</ref> promises to improve interoperability and easy integration of data silos <ref type="bibr" target="#b1">[2]</ref> by providing semantically adequate and context-aware data. However, the Resource Description Framework (RDF) <ref type="bibr" target="#b2">[3]</ref> data model of Linked Data and SPARQL <ref type="bibr" target="#b3">[4]</ref> are unfamiliar to most developers <ref type="bibr" target="#b4">[5]</ref>. 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 <ref type="bibr" target="#b5">[6]</ref>, often requiring additional parsing or transformation steps to allow for their usage in Web applications <ref type="bibr" target="#b6">[7]</ref>. 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 <ref type="bibr" target="#b7">[8]</ref>. Overall, these challenges limit the practical adoption of Linked Data queried through SPARQL, as depicted in Figure <ref type="figure" target="#fig_0">1a</ref>). In contrast, GraphQL <ref type="bibr" target="#b8">[9]</ref> has been specifically designed for mobile and Web applications. 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 <ref type="bibr" target="#b9">[10]</ref>. 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 <ref type="bibr" target="#b10">[11]</ref>. 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.</p><p>Recently, several publications have explored combining GraphQL with RDF compatible serializations <ref type="bibr" target="#b11">[12,</ref><ref type="bibr" target="#b12">13,</ref><ref type="bibr" target="#b13">14,</ref><ref type="bibr" target="#b14">15,</ref><ref type="bibr" target="#b15">16]</ref>. 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 <ref type="figure" target="#fig_0">1b</ref>). 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 <ref type="figure" target="#fig_0">1c</ref>), 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.</p><p>Our work comprises the following contributions: an overview of related works exploring 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 UGQL<ref type="foot" target="#foot_0">1</ref> (Section 4), based on Hyper-GraphQL <ref type="bibr" target="#b15">[16]</ref>, and a performance evaluation of this implementation (Section 5). We conclude with a summary of our findings and an outlook in Section 6.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Related Work</head><p>The popularity of GraphQL in the Web engineering community has recently prompted several investigations into the integration of Semantic Web principles and general compatibility 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. <ref type="bibr" target="#b16">[17]</ref>.</p><p>Farré et al. introduced the GraphQL Metamodel (GQLM) <ref type="bibr" target="#b11">[12]</ref> 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.</p><p>Morph-GraphQL (MGQL) <ref type="bibr" target="#b17">[18]</ref> 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.</p><p>In contrast, GraphQL-LD (GQLD) <ref type="bibr" target="#b12">[13]</ref> employs an ad-hoc query translation approach. It transforms a given GraphQL query to a corresponding SPARQL query by employing a user-provided semantic JSON-LD context <ref type="bibr" target="#b18">[19]</ref>, which maps defined keywords 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.</p><p>The commercial graph store Stardog <ref type="bibr" target="#b13">[14]</ref> 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 TopBraid <ref type="bibr" target="#b14">[15]</ref> is another commercial product that enables querying RDF data using GraphQL. It tightly integrates schema definition and validation with SHACL shapes <ref type="bibr" target="#b19">[20]</ref>. 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 <ref type="bibr" target="#b20">[21]</ref>, 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 <ref type="bibr" target="#b21">[22]</ref>. 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 <ref type="bibr" target="#b22">[23]</ref>. 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.</p><p>Finally, the Java-based open source project HyperGraphQL (HGQL) <ref type="bibr" target="#b15">[16]</ref> 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 <ref type="bibr" target="#b23">[24]</ref>. 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.</p><p>While all described approaches provide viable tools to support querying RDF data sources using GraphQL, they simultaneously require a decent command of Semantic 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 <ref type="table" target="#tab_0">1</ref> 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Automatic GraphQL Bootstrapping</head><p>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.</p><p>We first detail the two steps of the bootstrapping procedure illustrated in Figure <ref type="figure">2</ref>, before describing our implementation UltraGraphQL and its usage in more detail.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Schema Extraction and Summarization</head><p>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 <ref type="bibr" target="#b20">[21]</ref>, 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.</p><p>An early approach to schema extraction by Matono et al. <ref type="bibr" target="#b24">[25]</ref> 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. <ref type="bibr" target="#b25">[26]</ref>, Lohmann et al. <ref type="bibr" target="#b26">[27,</ref><ref type="bibr" target="#b27">28]</ref>, Dudáš et al. <ref type="bibr" target="#b28">[29]</ref> and Benedetti et al. <ref type="bibr" target="#b29">[30,</ref><ref type="bibr" target="#b30">31]</ref> 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. <ref type="bibr" target="#b31">[32]</ref> propose an approximate schema discovery approach based on hierarchical clustering instead of data annotations.</p><p>ex:bob a ex:Person; ex:name "Bob"; ex:address ex:addr_a.</p><p>ex:addr_a a ex:Address; ex:street "Main street". summarize type ex_Person implements ex_Person_Interface @service(id: "dataset"){ ex_name: [String] @service(id: "dataset") ex_address: [ex_Address] @service(id: "dataset") } type ex_Address implements ex_Address_Interface @service(id: "dataset"){ ex_street: [String] @service(id: "dataset") }  As outlined in Section 2, TopBraid <ref type="bibr" target="#b32">[33]</ref> 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 <ref type="bibr" target="#b13">[14]</ref> directly interprets OWL and RDFS ontologies as data schemas, regardless of their actual use in the data. Ontology2GraphQL <ref type="bibr" target="#b33">[34]</ref> follows a similar approach to create an HGQLS configuration from ontologies, following the ICDD (Information Container for Data Drop) standard <ref type="bibr" target="#b34">[35]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Map</head><p>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 <ref type="bibr" target="#b35">[36]</ref>, 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 <ref type="figure">3</ref>, 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Schema Mapping</head><p>In order for a GraphQL endpoint to provide schema introspection capabilities, a predefined GQLS is required. Therefore all primitives of the previously fixed vocabulary depicted in Figure <ref type="figure">3</ref> are aligned with corresponding ones in GQLS, as summarized in Table <ref type="table" target="#tab_2">2</ref>. 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. <ref type="foot" target="#foot_1">2</ref> If multiple ranges are defined for a property in the data schema, a 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.</p><p>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 <ref type="bibr" target="#b36">[37]</ref>, 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3">Automatic GraphQL to SPARQL translation</head><p>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 <ref type="figure" target="#fig_2">4</ref> 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. <ref type="foot" target="#foot_2">3</ref>The number of generated queries depends on the structure of the query in correlation 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">UltraGraphQL Bootstrapping</head><p>To simplify the deployment of GraphQL endpoints for RDF triple stores, we present UltraGraphQL (UGQL). Extending the features and codebase of HyperGraphQL <ref type="bibr" target="#b15">[16]</ref>,</p><p>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.</p><p>The software architecture of UGQL, illustrated in Figure <ref type="figure">5</ref>, 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.</p><p>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 repository 1 .</p><p>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  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 documentation 1 .</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Performance Evaluation</head><p>To measure the performance of UGQL, we conducted manual and quantitative evaluations of the proposed schema mapping process and its applicability, as well as comparative 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 repository <ref type="foot" target="#foot_3">4</ref> . All practical experiments were conducted on a machine running Ubuntu 18.04 with 16GB RAM on an Intel Core 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.1">Bootstrapping Evaluation</head><p>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 <ref type="bibr" target="#b35">[36]</ref> and focus on the remaining mapping process in this evaluation.</p><p>To ensure the qualitative correctness of the mapping process as described in Section 3.2, the GQLS generation was first verified using corresponding unit tests, as documented in the project repository <ref type="foot" target="#foot_4">5</ref> , 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 <ref type="figure">6</ref>, 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 <ref type="bibr" target="#b37">[38]</ref> 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 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.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.2">Translation Evaluation</head><p>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 Fuseki<ref type="foot" target="#foot_5">6</ref> (v3.7.0) in-memory RDF store to serve as SPARQL endpoint throughout the evaluation.</p><p>For the qualitative evaluation, we execute 4 manually crafted queries<ref type="foot" target="#foot_6">7</ref> against a dataset<ref type="foot" target="#foot_7">8</ref> 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 <ref type="table" target="#tab_4">3</ref> 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 <ref type="bibr" target="#b37">[38]</ref> 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. 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 dataset <ref type="foot" target="#foot_8">9</ref> 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 dataset<ref type="foot" target="#foot_9">10</ref> of 1000 persons with 1000 fields with a random literal value of length ten each.</p><p>The results, depicted in Figure <ref type="figure">7</ref>, 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 </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6">Discussion and Conclusion</head><p>In this paper, we presented a conceptual design and tool support to automatically bootstrap 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 condensed 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, making manual schema generation tiresome and nearly impossible to manually provide for large and dynamic datasets.</p><p>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 ondemand 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 changing triple stores.</p><p>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 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.</p><p>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.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 1 :</head><label>1</label><figDesc>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</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 2 :Fig. 3 :</head><label>23</label><figDesc>Fig. 2: Two phases of GraphQL bootstrapping: Schema summarization &amp; mapping</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Fig. 4 :</head><label>4</label><figDesc>Fig. 4: Querying multiple RDF stores through UGQL</figDesc><graphic coords="8,140.74,548.15,408.00,112.03" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>(a) 5 Fig. 6 :</head><label>56</label><figDesc>Fig. 6: Quantitative evaluation of the schema mapping execution time</figDesc><graphic coords="10,136.16,115.84,165.99,123.84" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Table 1 :</head><label>1</label><figDesc>Overview of GraphQL to RDF tools -'( )' denotes partial support</figDesc><table><row><cell>Features</cell><cell>GQLM</cell><cell>MGQL</cell><cell>GQLD</cell><cell>Stardog</cell><cell>TopBraid</cell><cell>HGQL</cell><cell>UGQL</cell></row><row><cell></cell><cell>[12]</cell><cell>[18]</cell><cell>[13]</cell><cell>[14]</cell><cell>[15]</cell><cell>[16]</cell><cell></cell></row><row><cell cols="2">Automatic Schema Extraction ( )</cell><cell>( )</cell><cell>-</cell><cell>( )</cell><cell>( )</cell><cell>-</cell><cell></cell></row><row><cell>Schema Introspection</cell><cell></cell><cell></cell><cell>-</cell><cell>( )</cell><cell></cell><cell></cell><cell></cell></row><row><cell>RDF-interpretable Results</cell><cell>-</cell><cell>-</cell><cell></cell><cell>-</cell><cell>-</cell><cell></cell><cell></cell></row><row><cell>Filtering and Ordering</cell><cell>-</cell><cell>-</cell><cell></cell><cell></cell><cell></cell><cell>( )</cell><cell></cell></row><row><cell>Federated Query Support</cell><cell>-</cell><cell>-</cell><cell></cell><cell>-</cell><cell>-</cell><cell></cell><cell></cell></row><row><cell>Mutation Support</cell><cell>-</cell><cell>-</cell><cell>-</cell><cell>-</cell><cell></cell><cell>-</cell><cell></cell></row><row><cell>License</cell><cell cols="7">None Apache MIT Commercial Commercial Apache Apache</cell></row><row><cell cols="8">filters and bindings. Notably, the handling of namespaced RDF predicates may require</cell></row><row><cell cols="8">an additional understanding of SPARQL concepts or the structure of the underlying</cell></row><row><cell cols="7">triple store. Results are provided as plain JSON and are not RDF-interpretable.</cell><cell></cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head>Table 2 :</head><label>2</label><figDesc>Overview of the mapping between RDF and UGQL RDF UGQL</figDesc><table><row><cell>Class</cell><cell>Object Type + Interface Type</cell></row><row><cell>Property</cell><cell>Field</cell></row><row><cell cols="2">Domain Domain(Object) of Field</cell></row><row><cell cols="2">Range Output Type of Field</cell></row><row><cell>Literal</cell><cell>String</cell></row><row><cell>SubClassOf</cell><cell>Interface Type + implements</cell></row><row><cell>SubPropertyOf</cell><cell>Add Domain and Output Type of Sub-Property to Super-Property</cell></row><row><cell>EquivalentClass</cell><cell>Mutual implements + directive</cell></row><row><cell cols="2">EquivalentProperty Merging Domain and Output Type of Both Fields + directive</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_4"><head>Table 3 :</head><label>3</label><figDesc>Qualitative comparison of UGQL, HGQL and SPARQL</figDesc><table><row><cell>Metric</cell><cell>Query</cell><cell cols="2">UGQL</cell><cell>HGQL</cell><cell cols="2">SPARQL</cell></row><row><cell></cell><cell></cell><cell cols="2">Standalone Fuseki</cell><cell>Fuseki</cell><cell>CSV</cell><cell>JSON</cell></row><row><cell></cell><cell>1</cell><cell cols="2">64 B</cell><cell>68 B</cell><cell cols="2">168 B</cell></row><row><cell>Query Size</cell><cell>2 3</cell><cell cols="2">78 B 187 B</cell><cell>82 B 202 B</cell><cell cols="2">280 B 260 B</cell></row><row><cell></cell><cell>4</cell><cell cols="2">155 B</cell><cell>160 B</cell><cell cols="2">258 B</cell></row><row><cell></cell><cell>1</cell><cell></cell><cell>30.1 KB</cell><cell></cell><cell>17.4 KB</cell><cell>73.3 KB</cell></row><row><cell>Result Size</cell><cell>2 3</cell><cell></cell><cell>10.4 KB 5.7 KB</cell><cell></cell><cell>4.9 KB 8.1 KB</cell><cell>33.4 KB 22.6 KB</cell></row><row><cell></cell><cell>4</cell><cell></cell><cell>2.5 MB</cell><cell></cell><cell>4.7 MB</cell><cell>13 MB</cell></row><row><cell></cell><cell>1</cell><cell>139 ms</cell><cell>180 ms</cell><cell>88.4 ms</cell><cell>10 ms</cell><cell>19 ms</cell></row><row><cell>Latency /</cell><cell>2</cell><cell>68.1 ms</cell><cell>103 ms</cell><cell>50.9 ms</cell><cell>8 ms</cell><cell>14.5 ms</cell></row><row><cell>Response Time</cell><cell>3</cell><cell>48.3 ms</cell><cell>64.3 ms</cell><cell>42.7 ms</cell><cell>7.3 ms</cell><cell>13.2 ms</cell></row><row><cell></cell><cell>4</cell><cell cols="3">3,530 ms 4,640 ms 2,970 ms</cell><cell>240 ms</cell><cell>715 ms</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_5"><head></head><label></label><figDesc>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.</figDesc><table><row><cell>Execution Time (in s)</cell><cell>0.0 0.2 0.4 0.6</cell><cell>0</cell><cell>10 SPARQL SPARQL CSV UGQL UGQL Standalone</cell><cell>20 Number of Nested Fields 30 Query Execution Time</cell><cell cols="2">40 Growing Depth of Nested Queries 50 0 0 100 200 300 Size (in kB) SPARQL 10 Standalone UGQL UGQL SPARQL CSV</cell><cell>20 Number of Nested Fields 30 Query Result Size</cell><cell>40</cell><cell>50</cell></row><row><cell>Execution Time (in s)</cell><cell>0 2 4 6 8</cell><cell>0</cell><cell>10 SPARQL SPARQL CSV UGQL UGQL Standalone</cell><cell>20 Number of Queried Fields 30 Query Execution Time</cell><cell>40</cell><cell>50 Growing Number of Fields 0 0 1000 2000 3000 Size (in kB) Standalone 10 UGQL UGQL SPARQL CSV SPARQL</cell><cell>20 Number of Queried Fields 30 Query Result Size</cell><cell>40</cell><cell>50</cell></row><row><cell></cell><cell></cell><cell></cell><cell cols="2">Fig. 7:</cell><cell></cell><cell></cell><cell></cell><cell></cell><cell></cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">https://git.rwth-aachen.de/i5/ultragraphql</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/docs/schema_mapping.md</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/docs/translation_phase.md</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_3">https://git.rwth-aachen.de/i5/ultragraphql/-/tree/master/evaluation</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_4">https://git.rwth-aachen.de/i5/ultragraphql/-/tree/master/docs/evaluation</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_5">https://jena.apache.org/documentation/fuseki2/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="7" xml:id="foot_6">https://git.rwth-aachen.de/i5/ultragraphql/-/tree/master/evaluation/queries/one_service</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="8" xml:id="foot_7">https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/evaluation/data/raw/persons_and_cars.ttl</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="9" xml:id="foot_8">https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/evaluation/data/nested_person_data.ttl</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="10" xml:id="foot_9">https://git.rwth-aachen.de/i5/ultragraphql/-/blob/master/evaluation/data/growing_field_data.ttl</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Acknowledgments. Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany's Excellence Strategy -EXC-2023 Internet of Production -390621612.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Towards an Infrastructure Enabling the Internet of Production</title>
		<author>
			<persName><forename type="first">J</forename><surname>Pennekamp</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Glebke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Henze</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Meisen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Quix</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Hai</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings -2019 IEEE International Conference on Industrial Cyber Physical Systems, ICPS 2019</title>
				<meeting>-2019 IEEE International Conference on Industrial Cyber Physical Systems, ICPS 2019</meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">FactDAG: Formalizing Data Interoperability in an Internet of Production</title>
		<author>
			<persName><forename type="first">L</forename><surname>Gleim</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Pennekamp</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Liebenberg</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Buchsbaum</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Niemietz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Knape</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Internet of Things Journal</title>
		<imprint>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="issue">4</biblScope>
			<biblScope unit="page" from="3243" to="3253" />
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<monogr>
		<title level="m" type="main">RDF 1.1 Concepts and Abstract Syntax</title>
		<author>
			<persName><forename type="first">D</forename><surname>Wood</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Lanthaler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Cyganiak</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2014">2014</date>
			<publisher>W3C</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">SPARQL 1.1 Query Language</title>
		<author>
			<persName><forename type="first">A</forename><surname>Seaborne</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Harris</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2013">2013</date>
			<publisher>W3C</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Toward Easier RDF</title>
		<author>
			<persName><forename type="first">D</forename><surname>Booth</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">W3C Workshop on Web Standardization for Graph Data</title>
				<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Easy Web API Development with SPARQL Transformer</title>
		<author>
			<persName><forename type="first">P</forename><surname>Lisena</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Meroño-Peñuela</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Kuhn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Troncy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">The Semantic Web -ISWC 2019</title>
				<imprint>
			<publisher>Springer International Publishing</publisher>
			<date type="published" when="2019">2019</date>
			<biblScope unit="page" from="454" to="470" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Transforming the JSON Output of SPARQL Queries for Linked Data Clients</title>
		<author>
			<persName><forename type="first">P</forename><surname>Lisena</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Troncy</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Companion Proceedings of the The Web Conference 2018</title>
				<imprint>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="775" to="780" />
		</imprint>
	</monogr>
	<note>WWW &apos;18</note>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Transparent Mobile Querying of Online RDF Sources Using Semantic Indexing and Caching</title>
		<author>
			<persName><forename type="first">W</forename><surname>Van Woensel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Casteleyn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Paret</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><forename type="middle">De</forename><surname>Troyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Web Information System Engineering -WISE 2011</title>
				<meeting><address><addrLine>Berlin Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="185" to="198" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<author>
			<persName><forename type="first">Facebook</forename><surname>Inc</surname></persName>
		</author>
		<title level="m">GraphQL. Working Draft</title>
				<imprint>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Migrating to GraphQL: A Practical Assessment</title>
		<author>
			<persName><forename type="first">G</forename><surname>Brito</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Mombach</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">T</forename><surname>Valente</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER)</title>
				<imprint>
			<date type="published" when="2019">2019. 2019</date>
			<biblScope unit="page" from="140" to="150" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Semantics and complexity of GraphQL</title>
		<author>
			<persName><forename type="first">O</forename><surname>Hartig</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Pérez</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2018 World Wide Web Conference</title>
				<meeting>the 2018 World Wide Web Conference</meeting>
		<imprint>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="1155" to="1164" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">GraphQL Schema Generation for Data-Intensive Web APIs</title>
		<author>
			<persName><forename type="first">C</forename><surname>Farré</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Varga</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Almar</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Model and Data Engineering</title>
				<imprint>
			<publisher>Springer International Publishing</publisher>
			<date type="published" when="2019">2019</date>
			<biblScope unit="page" from="184" to="194" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">GraphQL-LD: Linked Data Querying with GraphQL</title>
		<author>
			<persName><forename type="first">R</forename><surname>Taelman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Vander Sande</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Verborgh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 17th International Semantic Web Conference</title>
				<meeting>the 17th International Semantic Web Conference</meeting>
		<imprint>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="1" to="4" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<title level="m" type="main">Stardog 7: The Manual</title>
		<ptr target="https://www.stardog.com/docs/#_graphql_queries" />
		<imprint>
			<date type="published" when="2020">2020</date>
		</imprint>
		<respStmt>
			<orgName>Stardog Union</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<monogr>
		<title level="m" type="main">Updating RDF Graphs with GraphQL</title>
		<author>
			<persName><surname>Topquadrant</surname></persName>
		</author>
		<ptr target="https://www.topquadrant.com/technology/graphql/graphql-mutations/" />
		<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<ptr target="https://github.com/hypergraphql/hypergraphql" />
		<title level="m">HyperGraphQL Git Respository</title>
				<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
		<respStmt>
			<orgName>Integration Ltd</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Bridges between GraphQL and RDF</title>
		<author>
			<persName><forename type="first">R</forename><surname>Taelman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Vander Sande</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Verborgh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">W3C Workshop on Web Standardization for Graph Data</title>
				<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Exploiting Declarative Mapping Rules for Generating GraphQL Servers with Morph-GraphQL</title>
		<author>
			<persName><forename type="first">D</forename><surname>Chaves-Fraga</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Priyatna</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Alobaid</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Corcho</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International Journal of Software Engineering and Knowledge Engineering</title>
		<imprint>
			<biblScope unit="volume">30</biblScope>
			<biblScope unit="issue">06</biblScope>
			<biblScope unit="page" from="785" to="803" />
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<author>
			<persName><forename type="first">M</forename><surname>Lanthaler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Sporny</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Kellogg</surname></persName>
		</author>
		<title level="m">JSON-LD 1.0</title>
				<imprint>
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
	<note>W3C rec.</note>
</biblStruct>

<biblStruct xml:id="b19">
	<monogr>
		<title level="m" type="main">Shapes Constraint Language (SHACL)</title>
		<author>
			<persName><forename type="first">D</forename><surname>Kontokostas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Knublauch</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2017">2017</date>
			<publisher>W3C rec</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<monogr>
		<title level="m" type="main">OWL 2 Web Ontology Language</title>
		<author>
			<persName><forename type="first">Working</forename><surname>Owl</surname></persName>
		</author>
		<author>
			<persName><surname>Group</surname></persName>
		</author>
		<ptr target="https://www.w3.org/TR/owl2-overview/" />
		<imprint>
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<monogr>
		<author>
			<persName><forename type="first">I</forename><surname>Polikoff</surname></persName>
		</author>
		<ptr target="https://www.topquadrant.com/from-owl-to-shacl-in-an-automated-way/" />
		<title level="m">From OWL to SHACL in an automated way</title>
				<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<monogr>
		<author>
			<persName><forename type="first">H</forename><surname>Knublauch</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Allemang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Steyskal</surname></persName>
		</author>
		<ptr target="https://www.w3.org/TR/shacl-af/" />
		<title level="m">SHACL Advanced Features</title>
				<imprint/>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<monogr>
		<ptr target="https://www.hypergraphql.org/" />
		<title level="m">HyperGraphQL</title>
				<imprint>
			<date type="published" when="2018">2018</date>
		</imprint>
		<respStmt>
			<orgName>Ltd</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b24">
	<analytic>
		<title level="a" type="main">An Indexing Scheme for RDF and RDF Schema based on Suffix Arrays</title>
		<author>
			<persName><forename type="first">A</forename><surname>Matono</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Amagasa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Yoshikawa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Uemura</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of SWDB&apos;03</title>
				<meeting>SWDB&apos;03</meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
			<biblScope unit="page" from="151" to="168" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b25">
	<analytic>
		<title level="a" type="main">A Visual Aide for Understanding Endpoint Data</title>
		<author>
			<persName><forename type="first">F</forename><surname>Florenzano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Parra</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">L</forename><surname>Reutter</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Venegas</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">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</title>
				<meeting>the Second International Workshop on Visualization and Interaction for Ontologies and Linked Data co-located with the 15th International Semantic Web Conference, VOILA@ISWC</meeting>
		<imprint>
			<date type="published" when="2016">2016</date>
			<biblScope unit="volume">1704</biblScope>
			<biblScope unit="page" from="102" to="113" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b26">
	<analytic>
		<title level="a" type="main">Extraction and Visualization of TBox Information from SPARQL Endpoints</title>
		<author>
			<persName><forename type="first">S</forename><surname>Lohmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Link</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Marbach</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Negru</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 20th International Conference on Knowledge Engineering and Knowledge Management (EKAW 2016)</title>
				<meeting>the 20th International Conference on Knowledge Engineering and Knowledge Management (EKAW 2016)</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="volume">10024</biblScope>
			<biblScope unit="page" from="713" to="728" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b27">
	<analytic>
		<title level="a" type="main">LD-VOWL: Extracting and Visualizing Schema Information for Linked Data</title>
		<author>
			<persName><forename type="first">M</forename><surname>Weise</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Lohmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Haag</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Visualization and Interaction for Ontologies and Linked Data</title>
				<meeting><address><addrLine>VOILA</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2016">2016. 2016</date>
			<biblScope unit="page">120</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b28">
	<analytic>
		<title level="a" type="main">Dataset Summary Visualization with LODSight</title>
		<author>
			<persName><forename type="first">M</forename><surname>Dudáš</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Svátek</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Mynarz</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Semantic Web Conference</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="36" to="40" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b29">
	<analytic>
		<title level="a" type="main">Online Index Extraction from Linked Open Data Sources</title>
		<author>
			<persName><forename type="first">F</forename><surname>Benedetti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Bergamaschi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Po</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Second International Workshop on Linked Data for Information Extraction (LD4IE 2014) co-located with the 13th International Semantic Web Conference (ISWC 2014)</title>
				<meeting>the Second International Workshop on Linked Data for Information Extraction (LD4IE 2014) co-located with the 13th International Semantic Web Conference (ISWC 2014)</meeting>
		<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="9" to="20" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b30">
	<analytic>
		<title level="a" type="main">Visual Querying LOD sources with LODeX</title>
		<author>
			<persName><forename type="first">F</forename><surname>Benedetti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Bergamaschi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Po</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 8th International Conference on Knowledge Capture</title>
				<meeting>the 8th International Conference on Knowledge Capture</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b31">
	<analytic>
		<title level="a" type="main">Schema Discovery in RDF Data Sources</title>
		<author>
			<persName><forename type="first">K</forename><surname>Kellou-Menouer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Kedad</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">International Conference on Conceptual Modeling</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="481" to="495" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b32">
	<monogr>
		<title level="m" type="main">Querying RDF Graphs with GraphQL</title>
		<author>
			<persName><surname>Topquadrant</surname></persName>
		</author>
		<ptr target="https://www.topquadrant.com/graphql/graphql-queries.html" />
		<imprint>
			<date type="published" when="2017">2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b33">
	<monogr>
		<title level="m" type="main">Ontology2GraphQL</title>
		<author>
			<persName><forename type="first">J</forename><surname>Werbrouck</surname></persName>
		</author>
		<ptr target="https://github.com/JWerbrouck/Ontology2GraphQL" />
		<imprint>
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b34">
	<analytic>
		<title level="a" type="main">Querying Heterogeneous Linked Building Data with Context-expanded GraphQL Queries</title>
		<author>
			<persName><forename type="first">J</forename><surname>Werbrouck</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Senthilvel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Beetz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Pauwels</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 7th Linked Data in Architecture and Construction Workshop</title>
				<meeting>the 7th Linked Data in Architecture and Construction Workshop</meeting>
		<imprint>
			<date type="published" when="2019">2019</date>
			<biblScope unit="volume">2389</biblScope>
			<biblScope unit="page" from="21" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b35">
	<analytic>
		<title level="a" type="main">Enabling ad-hoc reuse of private data repositories through schema extraction</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">C</forename><surname>Gleim</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">R</forename><surname>Karim</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Zimmermann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Kohlbacher</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Stenzhorn</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Decker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Beyan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Biomedical Semantics</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="issue">1</biblScope>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b36">
	<analytic>
		<title level="a" type="main">Assessing the Quality of owl:sameAs Links</title>
		<author>
			<persName><forename type="first">P.-H</forename><surname>Paris</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">The Semantic Web: ESWC 2018 Satellite Events</title>
				<imprint>
			<publisher>Springer International Publishing</publisher>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="304" to="313" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b37">
	<monogr>
		<author>
			<persName><forename type="first">J</forename><surname>Nielsen</surname></persName>
		</author>
		<title level="m">Usability Engineering</title>
				<meeting><address><addrLine>San Francisco, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Morgan Kaufmann Publishers Inc</publisher>
			<date type="published" when="1994">1994</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
