<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">INFORMATICA</journal-id>
<journal-title-group><journal-title>Informatica</journal-title></journal-title-group>
<issn pub-type="epub">1822-8844</issn><issn pub-type="ppub">0868-4952</issn><issn-l>0868-4952</issn-l>
<publisher>
<publisher-name>Vilnius University</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">INFOR490</article-id>
<article-id pub-id-type="doi">10.15388/22-INFOR490</article-id>
<article-categories><subj-group subj-group-type="heading">
<subject>Research Article</subject></subj-group></article-categories>
<title-group>
<article-title>Blockchain-Based Transaction Manager for Ontology Databases</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0001-7506-5739</contrib-id>
<name><surname>Knez</surname><given-names>Timotej</given-names></name><email xlink:href="timotej.knez@fri.uni-lj.si">timotej.knez@fri.uni-lj.si</email><xref ref-type="aff" rid="j_infor490_aff_001"/><xref ref-type="corresp" rid="cor1">∗</xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Gašperlin</surname><given-names>Domen</given-names></name><email xlink:href="domen.gasperlin@gmail.com">domen.gasperlin@gmail.com</email><xref ref-type="aff" rid="j_infor490_aff_001"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Bajec</surname><given-names>Marko</given-names></name><email xlink:href="marko.bajec@fri.uni-lj.si">marko.bajec@fri.uni-lj.si</email><xref ref-type="aff" rid="j_infor490_aff_001"/>
</contrib>
<contrib contrib-type="author">
<contrib-id contrib-id-type="orcid">https://orcid.org/0000-0003-3452-1106</contrib-id>
<name><surname>Žitnik</surname><given-names>Slavko</given-names></name><email xlink:href="slavko.zitnik@fri.uni-lj.si">slavko.zitnik@fri.uni-lj.si</email><xref ref-type="aff" rid="j_infor490_aff_001"/>
</contrib>
<aff id="j_infor490_aff_001"><institution>University of Ljubljana</institution>, Faculty of Computer and Information Science, <country>Slovenia</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>∗</label>Corresponding author.</corresp>
</author-notes>
<pub-date pub-type="ppub"><year>2022</year></pub-date><pub-date pub-type="epub"><day>16</day><month>6</month><year>2022</year></pub-date><volume>33</volume><issue>2</issue><fpage>343</fpage><lpage>364</lpage><history><date date-type="received"><month>1</month><year>2022</year></date><date date-type="accepted"><month>6</month><year>2022</year></date></history>
<permissions><copyright-statement>© 2022 Vilnius University</copyright-statement><copyright-year>2022</copyright-year>
<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
<license-p>Open access article under the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">CC BY</ext-link> license.</license-p></license></permissions>
<abstract>
<p>Knowledge graphs are commonly represented by ontology-based databases. Tracking the provenance of ontological changes and ensuring ontology consistency is important. In this work, we propose a transaction manager for ontology-based database manipulation that combines blockchain and Semantic Web technologies. The latter is used for the efficient querying and modification of data, whereas the blockchain is used for the secure storage and tracking of changes. The blockchain enables a decentralized setup and data restoration. We evaluate our solution by measuring cost and time. Our solution introduces some overhead for updates whereas querying works at the same speed as the underlying ontology database.</p>
</abstract>
<kwd-group>
<label>Key words</label>
<kwd>Semantic Web</kwd>
<kwd>blockchain</kwd>
<kwd>ontologies</kwd>
<kwd>databases</kwd>
<kwd>IPFS</kwd>
<kwd>Ethereum</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="j_infor490_s_001">
<label>1</label>
<title>Introduction</title>
<p>The World Wide Web is one of the most commonly used platforms for computer applications today. While it contains a large amount of knowledge on a wide variety of topics, most of that knowledge is captured in unstructured text documents. These documents are designed to be understood by humans and are difficult to use for computer systems. The inventor of the World Wide Web, Tim Berners-Lee, famously claimed that the information presented on the Web should be accessible as raw data presented in a well-defined structured format. The data would thus be more useful for other applications. He described the concept of the Semantic Web, where in addition to human-readable formats, the information would also be available in a structured form designed to be used by computers. In order to help reach this goal, the World Wide Web Consortium (W3C) defined a set of technologies that are recommended when developing the Semantic Web. For modelling human knowledge in a way that is useful for computers, ontology representations are commonly used. In computer science, ontologies are collections of entities, their properties, and connections between them. Building and updating ontologies present many challenges. One of the main challenges is storing an ontology in such a way that anyone could use it and contribute new knowledge. This could be achieved by setting up centralized servers. That, however, would require someone constantly maintaining and paying for the infrastructure. Once the maintenance stopped, the ontology would also stop being available and would be lost.</p>
<p>In recent years, we have seen a rise in the popularity of blockchain technologies. Public blockchains like Bitcoin (Nakamoto, <xref ref-type="bibr" rid="j_infor490_ref_025">2009</xref>) work using a peer-to-peer network and a set of advanced cryptographic algorithms to store a list of transactions between its users. This way they can provide transparency, decentralization, and tamper-resistance, which are all features that would also be useful for managing public ontologies. There are different varieties of blockchain networks. On public blockchains, anyone can read and use the stored data. There are also private blockchains that limit who can see and change their data. Since a private blockchain allows us to ensure that only trusted users get access, there is less need for strict security protocols. Some blockchains use some concepts from public and some from private blockchains. Those chains are called hybrid blockchains. The idea of using blockchains for storing data was further expanded in 2015 when the Ethereum network (Buterin, <xref ref-type="bibr" rid="j_infor490_ref_005">2014</xref>) enabled many other applications to take advantage of the technology using smart contracts. Smart contracts are programs that we can publish on the Ethereum blockchain that ensure the execution of agreements described in them. In our project, we use smart contracts to store the data about each change on the Ethereum blockchain.</p>
<p>Blockchains ensure decentralization, security, and transparency. While blockchains provide secure and decentralized storage, they are not designed to store large amounts of data. This limitation comes from the fact that every client has to download all of the data that is stored on the blockchain. In order to store larger amounts of data in a decentralized way, we propose the use of the IPFS network (Benet, <xref ref-type="bibr" rid="j_infor490_ref_002">2014</xref>). IPFS (interplanetary file system) is a P2P system that distributes storage among multiple computers in a network. The network is designed for storing larger files. We can access the files stored in the network using their content identifiers. Each identifier is comprised of multiple parts: the encoding prefix, version, content type code, and the hash of the document. The identifiers are short enough to be stored on the blockchain using a smart contract. This way we can combine the two technologies to store larger files while keeping the security and transparency that the blockchain provides.</p>
<p>In our work, we combine the blockchain with the technologies of the Semantic Web to produce a system for managing ontologies. Our system uses the Ethereum smart contracts and the IPFS network to store an ontology in a completely decentralized way. This allows us to distribute a public ontology to its users without needing centralized servers. We can also enable users to submit their own changes to the ontology. All the changes to the ontology are tracked, so anyone can revert the ontology back to a previous state and continue developing it as their own branch. The implementation and evaluation of the proposed system is publicly available in the source code repository (Gašperlin, <xref ref-type="bibr" rid="j_infor490_ref_013">2021</xref>). The main contributions of our work are as follows:</p>
<list>
<list-item id="j_infor490_li_001">
<label>a)</label>
<p>Implementation of the proposed solution into an ontology-based database transaction manager would provide strong security via decentralization and authorized change logging.</p>
</list-item>
<list-item id="j_infor490_li_002">
<label>b)</label>
<p>Based on existing proposed systems, the proposed system allows for complete data loss protection and complete history of changes that enable restoration to any point in history.</p>
</list-item>
</list>
<p>The rest of the paper is organized as follows: in Section <xref rid="j_infor490_s_002">2</xref> we present previous work related to the Semantic Web, blockchain technologies, and combining the two. In Section <xref rid="j_infor490_s_006">3</xref>, we present our transaction manager for ontology databases that uses Ethereum and IPFS to track changes made to an ontology. In Section <xref rid="j_infor490_s_009">4</xref>, we present data flow and describe common usage patterns. After that, in Section <xref rid="j_infor490_s_015">5</xref>, we run a series of tests to determine the performance and cost of using our transaction manager. Finally, in Section <xref rid="j_infor490_s_023">6</xref>, we comment on the results and propose some directions for future work.</p>
</sec>
<sec id="j_infor490_s_002">
<label>2</label>
<title>Background and Related Work</title>
<p>In this section, we introduce previous work that has explored the use of ontologies and other Semantic Web technologies. We also present work related to blockchain technologies and a combination of the two.</p>
<sec id="j_infor490_s_003">
<label>2.1</label>
<title>Semantic Web</title>
<p>The idea of a Semantic Web was proposed by Tim Berners-Lee at the very first World Wide Web Conference in 1994 (Shadbolt <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_030">2006</xref>). Many years later, however, it has still not been fully realized. The technology stack for implementation of the Semantic Web was later standardized by the W3C organization. The semantic Web is designed to be an extension of the World Wide Web, where the meaning of information is well defined. The main focus is put on the data instead of the documents. On the Semantic Web, data is presented by entities and the relations between them.</p>
<p>The basis for a Semantic Web are unique identifiers of resources that can be used to reference and differentiate between the resources. For that purpose, we use uniform resource identifiers (URI). The most common type of a URI is the URL that defines the protocol and the location on the computer network required for accessing a resource.</p>
<p>In addition to resource identifiers, another technology defined by the W3C is the data model for representing information. W3C standardized the use of the Resource Description Framework (RDF) model, described by Decker <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_008">2000</xref>), for data representation on the Semantic Web. The RDF model uses simple statements to describe resources and connections between them. When working with ontologies, it is useful to have some unified sets of relations that can be used to describe entities. For this purpose, the RDFS and the OWL languages were created to expand the RDF and provide better descriptiveness (McBride, <xref ref-type="bibr" rid="j_infor490_ref_022">2004</xref>; Horrocks <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_016">2003</xref>; McGuinness and Van Harmelen, <xref ref-type="bibr" rid="j_infor490_ref_023">2004</xref>).</p>
<p>The Semantic technology stack also defines the SPARQL language described by Pérez <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_028">2006</xref>). SPARQL is a language for querying an ontology. It supports a set of statements for retrieving data from an ontology. It also supports commands for inserting and deleting relations captured in an ontology. The specification also defines some other standards that are not relevant to our proposed system.</p>
<p>In this work, we focus mostly on the part of the Semantic Web related to building ontologies. The ontologies are considered to be the backbone of the Semantic Web (Taye, <xref ref-type="bibr" rid="j_infor490_ref_036">2010</xref>). In the field of computer science, ontology is a model of entities and the relations between them (Stevens <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_035">2000</xref>; Noy and McGuinness, <xref ref-type="bibr" rid="j_infor490_ref_027">2001</xref>). Ontologies have become one of the most common representations for storing general human knowledge in computer systems (Noy and McGuinness, <xref ref-type="bibr" rid="j_infor490_ref_027">2001</xref>). Over the last years, many different ontologies have been built with the aim of capturing as much Semantic knowledge as possible (Lehmann <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_019">2015</xref>; Bollacker <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_004">2008</xref>; Speer and Havasi, <xref ref-type="bibr" rid="j_infor490_ref_033">2012</xref>; Shortliffe, <xref ref-type="bibr" rid="j_infor490_ref_031">1976</xref>; Donnelly, <xref ref-type="bibr" rid="j_infor490_ref_009">2006</xref>). One of the best-known ontologies is DBpedia (Lehmann <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_019">2015</xref>), which contains general knowledge gathered from infoboxes on Wikipedia. We decided to demonstrate our system on the DBpedia ontology. Ontologies can also contain more specific domain knowledge. For instance, the SNOMED CT (Donnelly, <xref ref-type="bibr" rid="j_infor490_ref_009">2006</xref>) ontology and the MYCIN (Shortliffe, <xref ref-type="bibr" rid="j_infor490_ref_031">1976</xref>) ontology contain medical information designed to help doctors with their work.</p>
</sec>
<sec id="j_infor490_s_004">
<label>2.2</label>
<title>Blockchain Technologies</title>
<p>The rise of blockchain technology started with the cryptocurrency Bitcoin in 2009 (Nakamoto, <xref ref-type="bibr" rid="j_infor490_ref_025">2009</xref>) when a peer-to-peer electronic cash system was presented to allow online payments to be sent to people without the need for centralized intermediaries. This has also solved the double-spending problem. However, the idea of a chain of blocks secured by cryptography was introduced by Stuart Haber for timestamping digital documents in 1991 (Haber and Stornetta, <xref ref-type="bibr" rid="j_infor490_ref_014">1991</xref>).</p>
<p>Blockchain technology has been evolving through generations. First-generation (Bitcoin, Litecoin, Dogecoin) was focused on creating a digital currency. The second-generation (Ethereum Classic) extended the concept to the use of smart contracts. They enable more advanced use cases besides the transfer of currency to support the digital economy. Smart contracts follow the terms of the agreement. An example of such platform is Ethereum but in the early stages, such smart contracts were error-prone and contained security vulnerabilities. Ethereum co-founder Gavin Wood even coined the term <italic>web3</italic> as a decentralized online ecosystem based on blockchain. It could be the future of the world wide web (Edelman, <xref ref-type="bibr" rid="j_infor490_ref_010">2021</xref>). The third generation (Cardano, Polkadot) created blockchain applications. With them, we can create a digital society where people could participate in broader economic activity in the areas such as health, art, education, and culture (Efanov and Roschin, <xref ref-type="bibr" rid="j_infor490_ref_011">2018</xref>). Based on accessibility we can differentiate between consortium, private and public blockchains. In public blockchains, anyone can join the network and participate in it. In private blockchains, only a selected few participants can be part of the network. Consortium blockchains have properties of both public and private networks. For consortium blockchains, permissions can be set as needed. They can be used to connect people from multiple organizations.</p>
<p>With smart contracts on Ethereum other cryptocurrencies or tokens can be created. Fungible tokens like Ether can be exchanged and traded as they are identical. On the other hand, we have non-fungible tokens. Each such token is unique and is not identical to other tokens. They can be used to represent rights, identities, and other real-world items such as art. In our application, we only use the ether tokens, which are fungible to pay for smart contract operations. The use of custom tokens is interesting for future expansion, as they could be used for the purpose of managing user permissions or as a payment for certain operations on the ontology.</p>
</sec>
<sec id="j_infor490_s_005">
<label>2.3</label>
<title>Semantic Web and Blockchain Integrations</title>
<p>The combination of Semantic Web and blockchain technologies has seen some attention in the literature recently. One project combining the two technologies was presented by Hector and Boris (<xref ref-type="bibr" rid="j_infor490_ref_015">2020</xref>). They created an interface in the form of an ontology called BLONDiE, that uses a Semantic representation to convey the current information about a blockchain. Multiple projects also explored ways of using blockchains to make the Semantic Web better. One such work is presented by Ugarte (<xref ref-type="bibr" rid="j_infor490_ref_037">2017</xref>), who presents an idea about a futuristic Internet based on blockchains. English <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_012">2016</xref>) present the potential benefits of combining Semantic technologies with a blockchain. The work of English <italic>et al.</italic> is later expanded by Cano-Benito <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_006">2019</xref>). Both papers focus on using blockchain technologies in the Semantic Web definitions themselves. By doing this the Semantic Web can be improved. They also present some scenarios in which the blockchain could be improved by using Semantic Web technologies. On the other hand, our aim is not to replace parts of the Semantic Web with blockchain, but rather to use the blockchain to enable the construction of a communal ontology without relying on a centralized governing entity.</p>
<p>Naim and Klas (<xref ref-type="bibr" rid="j_infor490_ref_024">2019</xref>) present a Semantic blockchain framework, that allows storing data on a blockchain in the form of an ontology. This helps with the efficient retrieval of data from the blockchain. Their approach requires everyone connected to the blockchain network to store the entire ontology. This raises scalability concerns for use cases that require storing large ontologies.</p>
<p>Another solution using blockchain technologies is presented by Markovic <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_021">2019</xref>). They implement a system for tracking food transport and determining if each part was compliant with the appropriate legislation. Data is stored in the Hyperledger Fabric blockchain that allows buyers to check if the transport process was appropriate.</p>
<p>Our application focuses on using a blockchain for tracking changes in an ontology. Tracking ontology changes is not a new concept. We present the existing tools that are related to our use case in Table <xref rid="j_infor490_tab_001">1</xref>. Some tools for tracking changes for the purposes of undo and redo functionalities are already present in the Protégé editor for ontologies (Liang <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_020">2005</xref>). These tools are very limited since all changes are lost after a program restart. An improvement for change tracking in Protégé was proposed by Khattak <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_018">2009</xref>). They created a plugin for the Protege editor that tracks every change that the user makes and allows a rollback to any previous version. Their solution keeps the changes stored in one place, which enables the tracking of each change from the beginning of an ontology. In their solution, all changes are only stored on a single computer and are available to only one user. We aim to use distributed storage technologies to store the changes in a decentralized and distributed way that protects us from data loss and enables collaboration between multiple users.</p>
<table-wrap id="j_infor490_tab_001">
<label>Table 1</label>
<caption>
<p>Comparison of projects that are the most similar to ours. All of the systems using a blockchain platform use Ethereum in combination with IPFS.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Project</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Goal</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Collaborative editing</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Blockchain platform</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Off-chain solution</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">File history</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Persistent storage</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Data loss protection</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Semantic checks</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Protégé history</td>
<td style="vertical-align: top; text-align: left">Tracking ontology changes for undo and redo operations</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✗</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Nizamuddin <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_026">2019</xref>)</td>
<td style="vertical-align: top; text-align: left">Tracking changes to documents</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Khattak <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_018">2009</xref>)</td>
<td style="vertical-align: top; text-align: left">Tracking changes to the ontology</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✓</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Jianjun <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_017">2020</xref>)</td>
<td style="vertical-align: top; text-align: left">Sharing documents only with trusted users</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Steichen <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_034">2018</xref>)</td>
<td style="vertical-align: top; text-align: left">Add access control using blockchain to the IPFS network</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✗</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✓</td>
<td style="vertical-align: top; text-align: left">✗</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Our system</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Track changes to the ontology on a blockchain</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✓</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✓</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✗</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✓</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✓</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✓</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">✓</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>We propose a solution for ontology management, that uses the Ethereum blockchain combined with IPFS to track changes. This concept is somewhat similar to the work done by Nizamuddin <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_026">2019</xref>). They used Ethereum and IPFS to keep track of changes when editing documents. Their application works in a similar way to version control software. They also implemented the limitation that a change is only applied if it is approved by at least two-thirds of the approvers. The main difference between our system and the one proposed by Nizamuddin <italic>et al.</italic> is that their system is designed to work with general documents without understanding their structure, while ours is designed as a transaction manager for an ontology database. Our system uses the Apache Jena framework to parse and execute the queries written by a user. Thus it can perform a variety of checks for the correctness of a change, like checking its syntax, checking the ontology consistency after the execution of a query etc. Jianjun <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_017">2020</xref>) also combined IPFS with Ethereum to create a system for sharing documents that can only be viewed by authorized users. This is achieved by using an Ethereum smart contract for checking the identities of the users. An approach similar to Jianjun <italic>et al.</italic> was also proposed by Steichen <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_034">2018</xref>). They use Ethereum and IPFS for access control. This way they solve the problem of only allowing some users to access documents stored on the IPFS network.</p>
<p>A large majority of the existing solutions for integrating semantic web with blockchain technologies use the Ethereum blockchain. The main reason for that is that they rely on the use of Ethereum smart contracts. The Ethereum smart contracts can also be used on any other network compatible with the Ethereum virtual machines. Because of that, there are several alternatives to using Ethereum. We found that the most perspective alternatives are the BNB chain (Binance team, <xref ref-type="bibr" rid="j_infor490_ref_003">2022</xref>) and the Fantom platform (Choi <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_007">2018</xref>). An advantage of using Ethereum is that it has the most users making it very secure, while the alternatives offer cheaper prices for executing smart contract functions.</p>
</sec>
</sec>
<sec id="j_infor490_s_006">
<label>3</label>
<title>Semantic Data Empowered by Blockchain</title>
<p>We present an architecture for a system combining Semantic Web and the blockchain technologies (Fig. <xref rid="j_infor490_fig_001">1</xref>). The system tracks changes to the ontology on a blockchain. The implementation of the system is available in a public source code repository (Gašperlin, <xref ref-type="bibr" rid="j_infor490_ref_013">2021</xref>). By tracking ontology changes on a distributed blockchain, our solution ensures safe storage of the ontology and also automates checking for its consistency. Among the main advantages of using a blockchain-based ontology management system are: (a) the ability for anyone to get the latest version of the ontology and contribute to it, (b) no need for dedicated ontology storage, (c) the ability to rollback to any stage of the build and (d) immutability of change history.</p>
<fig id="j_infor490_fig_001">
<label>Fig. 1</label>
<caption>
<p>Architecture of the proposed system. The user updates the database using a SPARQL query. (1) The user sends a query to the SPARQL endpoint. (2) Our transaction manager uses Apache Jena to execute the update on the local ontology database. (3) Transaction manager uses the java-ipfs-http-client to upload the query to IPFS. (4) Transaction manager uses the Web3j library to store the IPFS identifier to the Ethereum smart contract.</p>
</caption>
<graphic xlink:href="infor490_g001.jpg"/>
</fig>
<p>Our proposed system allows the user to interface with the ontology using the SPARQL language (Pérez <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_028">2006</xref>). This allows the user to query and edit its content as well as create and delete records. Whenever a user executes a query that changes the ontology, the change is also automatically stored on the blockchain. This allows us to reconstruct the entire ontology from the blockchain in the event of a complete data loss. The use of a public blockchain also means that anyone wanting to contribute or use our ontology can reconstruct the ontology from the blockchain. After that, they can use the same system to apply their own changes and share them on the blockchain. The use of cryptographic methods also means that the identity of the author of each change can be tracked securely. By checking the consistency of the ontology before applying a change to the blockchain we can also ensure that no contradictions are introduced into the ontology.</p>
<p>The architecture is shown in more detail in Fig. <xref rid="j_infor490_fig_001">1</xref>. The user interfaces with the application logic using the SPARQL language. The current ontology is stored locally in the Apache Jena Triple Database (TDB). The application uses the Apache Jena library (Siemer, <xref ref-type="bibr" rid="j_infor490_ref_032">2019</xref>) to access the Apache Jena TDB. The Apache Jena library was selected for the implementation as it supports RDF databases, SPARQL querying, and reasoning for checking the ontology consistency. It lacks support for the OWL 2 language, but if that is a problem, we recommend switching to the owlapi library. Each change is also recorded on the blockchain. Since storing large documents on a blockchain itself is not efficient and would be very expensive, we store the data about the change on the IPFS network. The application then stores the content identifier of the file stored on the IPFS network to the Ethereum blockchain. The application uses the java-ipfs-http-client library (Preston <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_029">2020</xref>) for communication with the IPFS network and the Web3j library<xref ref-type="fn" rid="j_infor490_fn_001">1</xref><fn id="j_infor490_fn_001"><label><sup>1</sup></label>
<p>Web3j Github: <uri>https://github.com/Web3j/Web3j</uri></p></fn> to communicate with the Ethereum network and for the creation of smart contracts. All libraries are managed using Maven. This selection of tools is just an example of tools to validate our theoretical proposal of creating an <italic>ontology-based transaction manager, empowered by blockchain</italic>. The architecture of the system is presented in Fig. <xref rid="j_infor490_fig_001">1</xref>.</p>
<p>When using our ontology management system the user should not bypass our system by editing the local ontology directly. This could result in a difference between the state of the ontology recorded on the blockchain and the local ontology. In this case, a consistent state could be achieved once again by restoring the local ontology from the blockchain.</p>
<p>Before we can run the program we have to define a set of parameters that the program requires. Parameters can be set in the configuration file of the program. We have to set the following parameters:</p>
<list>
<list-item id="j_infor490_li_003">
<label>a)</label>
<p>Path to the file containing SPARQL commands to execute;</p>
</list-item>
<list-item id="j_infor490_li_004">
<label>b)</label>
<p>IPFS node for connecting to the IPFS network;</p>
</list-item>
<list-item id="j_infor490_li_005">
<label>c)</label>
<p>Ethereum node for connecting to the Ethereum network;</p>
</list-item>
<list-item id="j_infor490_li_006">
<label>d)</label>
<p>A user account with funding for the smart contract (Private key or a wallet address with a password).</p>
</list-item>
</list>
<p>We publish changes by first uploading them to the IPFS network. As a result, we get an identifier that we can later use to retrieve the changes file. The identifier gets stored on the Ethereum blockchain using a smart contract that gets created at the first launch of our program. When one user creates a change, others can use the smart contract and the IPFS network to get information about the change and update their local ontologies. The smart contract is written in the Solidity language and translated to a Java class. It is not storing the entire queries that might be large in size, but only the content identifiers that can be used to retrieve the full queries from the IPFS network.</p>
<p>The smart contract contains 6 methods that get called by the transaction manager (see Algorithm <xref rid="j_infor490_fig_002">1</xref>). The initial ontology refers to a set (or multiple sets) of triplets that get inserted when the ontology is initialized. The migration refers to a SPARQL query that has been executed on the ontology to change its data.</p>
<fig id="j_infor490_fig_002">
<label>Algorithm 1</label>
<caption>
<p>Ethereum smart contract</p>
</caption>
<graphic xlink:href="infor490_g002.jpg"/>
</fig>
<sec id="j_infor490_s_007">
<label>3.1</label>
<title>Selection of an Appropriate Blockchain Platform</title>
<p>We decided to use the Ethereum blockchain for storing the content identifiers of each change to the ontology. The reason for using the Ethereum network is that the Ethereum smart contracts are also supported by various different blockchain systems. We demonstrate our system on the Ethereum network which is the most well-known and offers high security due to a large number of miners. One of the drawbacks of using Ethereum for production systems is the high cost of smart contract transactions. To avoid that, the user could easily reconfigure our system to work with a different blockchain that also supports Ethereum smart contracts.</p>
</sec>
<sec id="j_infor490_s_008">
<label>3.2</label>
<title>Consistency Checking</title>
<p>The idea behind consistency checking is that we can apply some rules to the relations in an ontology. For instance, if we have a relation stating that a person was born on a certain day, we can decide not to allow another relation stating that the same person was born on another date. In order to prevent such cases, we need a method for checking consistency based on some reasoning rules. Apache Jena supports multiple inference engines (reasoners) for deriving assertions from base RDF graph and for checking its consistency (Apache Jena, <xref ref-type="bibr" rid="j_infor490_ref_001">2021</xref>). The mechanisms differ in their capabilities and complexities:</p>
<def-list><def-item><term><bold>Transitive reasoner</bold></term><def>
<p>is a simple reasoner that provides support for checking the transitive and reflexive properties of the <italic>subPropertyOf</italic> and <italic>subClassOf</italic> relations.</p></def></def-item><def-item><term><bold>RDFS reasoner</bold></term><def>
<p>provides an implementation for the RDFS entailments. The user can configure which entailments to use.</p></def></def-item><def-item><term><bold>OWL, OWL mini, and OWL Micro reasoners</bold></term><def>
<p>implement a part of the OWL/Lite language.</p></def></def-item><def-item><term><bold>Generic rule reasoner</bold></term><def>
<p>provides support for user-defined rules. For example, the rule could automatically assign rdf:type BigCity to the cities that have a population greater than 1 million.</p></def></def-item></def-list>
<p>We only publish the changes to the blockchain if the resulting ontology is consistent. One limitation of our approach for consistency checking is that the checks are done locally before a change is applied. This means that a malicious user could bypass the checks and apply a contradictory change directly to the blockchain. This can be mitigated by checking consistency when fetching the changes and reverting transactions that cause invalid states. In order to completely resolve this issue in the future, we propose the use of a voting-like mechanism where a change has to be confirmed by some number of users in order to become a part of the ontology. This mechanism can be implemented similarly to the voting mechanism proposed by Nizamuddin <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor490_ref_026">2019</xref>). In this case, we would have a group of trusted users, who have the ability to approve transactions. Once a transaction has been approved by two-thirds of the trusted users, it would become part of the ontology. In our case, the process of approving a transaction would be done automatically by the reviewers’ transaction managers. In order for someone to become a trusted user, they would also need the approval of a large enough percentage of existing trusted users. This way the changes that cause an inconsistent state would not get included in the shared ontology. This mechanism is not a part of our current implementation but could be implemented in the future.</p>
</sec>
</sec>
<sec id="j_infor490_s_009">
<label>4</label>
<title>Common Usage Patterns</title>
<p>In this section, we present some of the common usage patterns that are supported by our application. Each pattern describes steps that are taken in the application when completing a task. We determine that the most important scenarios for our system are (a) the initialization of an ontology, (b) running a query, (c) recovering an ontology from the blockchain and (d) collaborative development of an ontology.</p>
<sec id="j_infor490_s_010">
<label>4.1</label>
<title>General System Data Flow</title>
<p>When the transaction manager gets executed, the system first checks if the local ontology is present. If there is no local ontology, it either reconstructs the ontology from the blockchain (see Section <xref rid="j_infor490_s_013">4.4</xref>) if it is available or initializes a new ontology (see Section <xref rid="j_infor490_s_011">4.2</xref>). Once the local ontology is present, the system checks for new changes that might have been submitted to the blockchain by other users and applies them to the local ontology (see Section <xref rid="j_infor490_s_014">4.5</xref>). After that the queries provided by the user get executed on the local ontology and written to the blockchain (see Section <xref rid="j_infor490_s_012">4.3</xref>).</p>
<p>We present the interactions between each part of the system that take place when a user submits a query to an already initialized ontology (Fig. <xref rid="j_infor490_fig_003">2</xref>). When a query is sent to our transaction manager, it first checks for new changes using the Ethereum smart contract. If any new changes have been committed since the last synchronization, it loads their identifiers. The identifiers allow the transaction manager to locate the details about each change on the IPFS network. The transaction manager then uses the identifiers to retrieve the SPARQL queries that have been executed during each of the changes and runs them on the local ontology database. After that, the state of the local ontology is synchronized with the shared state.</p>
<p>Once the local ontology is in a synchronized state, the user’s query gets executed and the transaction manager checks the ontology for consistency with all of the reasoning rules. If the ontology is consistent, the query gets written to the IPFS network. After that, the transaction manager writes the IPFS content identifier of the query to the Ethereum blockchain using the smart contract. By storing the queries on the IPFS network and only storing their content identifiers on the blockchain we avoid the problems and cost of storing large amounts of data on the blockchain. This is important since some queries for adding ontology records can be very large.</p>
<fig id="j_infor490_fig_003">
<label>Fig. 2</label>
<caption>
<p>A typical data flow between components of our system when a user runs a query using our transaction manager. In the presented scenario, the system is already initialized and the user is running one or more SPARQL queries. The first part of the process is responsible for retrieving new changes submitted by other users of the ontology. The second part is responsible for applying and publishing the changes done by this user.</p>
</caption>
<graphic xlink:href="infor490_g003.jpg"/>
</fig>
</sec>
<sec id="j_infor490_s_011">
<label>4.2</label>
<title>Initializing the Ontology</title>
<p>The first use case that we describe is responsible for the initial loading of an existing ontology into our system. In this case, we start with a pre-existing ontology stored locally as a set of files containing the ontology triplets. The local ontology of the system is not yet set up and the ontology is not yet stored on the distributed storage. During the process, the ontology gets loaded into our local database and stored on the IPFS and blockchain. This process is important since it allows us to use our system on an already existing ontology. Our system also supports initialization from an empty ontology or an ontology stored on the IPFS and blockchain. The latter is presented in more detail in Section <xref rid="j_infor490_s_013">4.4</xref>. The process of initialization using a local ontology has the following steps (presented in Fig. <xref rid="j_infor490_fig_004">3</xref>):</p>
<list>
<list-item id="j_infor490_li_007">
<label>a)</label>
<p>The ontology data is first loaded into the local Apache Jena database.</p>
</list-item>
<list-item id="j_infor490_li_008">
<label>b)</label>
<p>We use the Apache Jena reasoner to check the loaded ontology for consistency.</p>
</list-item>
<list-item id="j_infor490_li_009">
<label>c)</label>
<p>If the ontology is consistent, it is uploaded to the IPFS network and its content identifiers are saved to the Ethereum smart contract.</p>
</list-item>
</list>
<p>After the initialization, we can track the changes of the ontology. We can also make some guarantees about the integrity of the tracked data. Ontology data at the content identifier has not been altered. This could not be guaranteed if we were using location addresses. Journal of ontology changes is kept, which proves the time and author of any change. The authors of each change to the ontology are identified under the Ethereum pseudo-anonymous address.</p>
<fig id="j_infor490_fig_004">
<label>Fig. 3</label>
<caption>
<p>Initializing the ontology management system from an existing ontology stored locally. In this use case the parts of the process shown in gray are not relevant as the ontology is not yet initialized and there are no user queries to execute.</p>
</caption>
<graphic xlink:href="infor490_g004.jpg"/>
</fig>
</sec>
<sec id="j_infor490_s_012">
<label>4.3</label>
<title>Running a Query</title>
<p>The second scenario is querying the data in the ontology (presented in Fig. <xref rid="j_infor490_fig_005">4</xref>). Queries are created in SPARQL language which allows both reading and updating the ontology. If the query only performs a read operation, the system only returns the local data. This way there is no need for the usage of the Ethereum or the IPFS which might slow down the performance. In the event that the query changes, creates, or deletes entries in the ontology, all of the changes are also checked for consistency and written to the Ethereum blockchain. Writing to the blockchain is done in two parts. First, the query is stored on the IPFS and the system generates an IPFS content identifier. Next, the identifier is stored in the smart contract on the Ethereum network. Running a query follows these steps:</p>
<list>
<list-item id="j_infor490_li_010">
<label>1.</label>
<p>Execute the query on the local ontology;</p>
</list-item>
<list-item id="j_infor490_li_011">
<label>2.</label>
<p>If the query changes the data, check for consistency, otherwise finish;</p>
</list-item>
<list-item id="j_infor490_li_012">
<label>3.</label>
<p>If the data is consistent, commit the change, otherwise, throw an exception;</p>
</list-item>
<list-item id="j_infor490_li_013">
<label>4.</label>
<p>Store the change data to the IPFS;</p>
</list-item>
<list-item id="j_infor490_li_014">
<label>5.</label>
<p>Save the IPFS identifier to the Ethereum blockchain.</p>
</list-item>
</list>
<fig id="j_infor490_fig_005">
<label>Fig. 4</label>
<caption>
<p>The process of executing a query using our system. The parts of the process shown in gray are not relevant for this use case as the ontology was already initialized and there are no changes submitted by other users.</p>
</caption>
<graphic xlink:href="infor490_g005.jpg"/>
</fig>
<p>After the ontology data is updated, other users can download the changes from the blockchain and apply them to their local ontologies. This way each change can be shared between everyone that is working on the ontology. The collaboration scenario is explained in more detail in Section <xref rid="j_infor490_s_014">4.5</xref>.</p>
</sec>
<sec id="j_infor490_s_013">
<label>4.4</label>
<title>Recovering from the Blockchain</title>
<p>The use of the blockchain enables full recovery of the ontology. This means that if any of the data in the local ontology is lost, it can be restored from the blockchain. The same process can be used when a new user wants to get the shared ontology. The recovery process is presented in Fig. <xref rid="j_infor490_fig_006">5</xref>. The recovery process works in a similar way to the initialization of the ontology except that the ontology is loaded from the Ethereum network instead of the local file system. Loading the ontology is done in two parts. First, all of the identifiers for the initial data and every recorded change are loaded from the smart contract on the Ethereum network. Next, the actual initialization data and queries are downloaded from the IPFS network using the retrieved identifiers. The steps for the ontology recovery are the following:</p>
<list>
<list-item id="j_infor490_li_015">
<label>1.</label>
<p>Migration identifiers are retrieved from the blockchain using the smart contract;</p>
</list-item>
<list-item id="j_infor490_li_016">
<label>2.</label>
<p>Information about changes is loaded from the IPFS using the identifiers;</p>
</list-item>
<list-item id="j_infor490_li_017">
<label>3.</label>
<p>Initial data is loaded to the local ontology;</p>
</list-item>
<list-item id="j_infor490_li_018">
<label>4.</label>
<p>All of the changes are applied to the local ontology.</p>
</list-item>
</list>
<fig id="j_infor490_fig_006">
<label>Fig. 5</label>
<caption>
<p>The process of restoring the ontology from the blockchain. The steps presented in gray are not relevant for this use case as the local ontology was not yet initialized and there are no queries submitted by the user.</p>
</caption>
<graphic xlink:href="infor490_g006.jpg"/>
</fig>
<p>A similar process can be also used for updating an existing local ontology to the latest version. Our implementation stores the queries that have been already executed, so it can automatically skip the changes from the Ethereum that have been applied already.</p>
</sec>
<sec id="j_infor490_s_014">
<label>4.5</label>
<title>Collaborative Ontology Building</title>
<p>As mentioned in the previous scenario, we can use the data stored on the blockchain in order to enable collaboration between multiple people when working with the ontology. Once the ontology exists on the blockchain, new contributors can use the recovery process described in Section <xref rid="j_infor490_s_013">4.4</xref>, to recreate the entire ontology locally. After that, they can apply their own changes to the ontology. The changes get automatically stored on the blockchain, so the other users can download them and apply them to their local ontologies. The process is shown in Fig. <xref rid="j_infor490_fig_007">6</xref>. The collaboration between person A and person B would follow these steps:</p>
<list>
<list-item id="j_infor490_li_019">
<label>1.</label>
<p>A initializes the ontology and applies some changes;</p>
</list-item>
<list-item id="j_infor490_li_020">
<label>2.</label>
<p>B uses the recovery procedure to get the latest version of the ontology;</p>
</list-item>
<list-item id="j_infor490_li_021">
<label>3.</label>
<p>B applies changes to the ontology;</p>
</list-item>
<list-item id="j_infor490_li_022">
<label>4.</label>
<p>A downloads the changes from the blockchain and applies them to the local ontology.</p>
</list-item>
</list>
<fig id="j_infor490_fig_007">
<label>Fig. 6</label>
<caption>
<p>Collaborative building and editing of the ontology using the Ethereum blockchain for synchronization.</p>
</caption>
<graphic xlink:href="infor490_g007.jpg"/>
</fig>
<p>The option for the collaborative building of the ontology enables the creation of a completely open ontology, where anyone could contribute their knowledge. Since this ontology can be stored on a decentralized blockchain, there is no need for centralized servers and their maintenance.</p>
</sec>
</sec>
<sec id="j_infor490_s_015">
<label>5</label>
<title>Evaluation</title>
<p>An important aspect of the proposed solution is its performance and operational cost. This is especially important, since using smart contracts tends to be slow and can also get expensive quickly. Each operation on an Ethereum smart contract requires a certain amount of gas to perform. Gas is a currency that we use in order to pay for the processing and storage required to execute an operation. We performed a series of tests to estimate the performance and the cost of using our solution. Each test was performed ten times in order to compute the mean values and standard deviations.</p>
<sec id="j_infor490_s_016">
<label>5.1</label>
<title>Evaluation Setup</title>
<p>All tests were executed on a Mac computer with 16 GB of memory and an Intel 8-core processor. During our tests, the heap size of our program was set to 2 GB. We tested the performance of the most common use cases by running a scenario 10 times. The scenario consisted of three parts, performed by two different users and contained the initialization of the ontology, its restoration from the blockchain, execution of all query types, and collaboration between the user. This way we covered all of the presented use cases. We measured the time that each operation took to execute as well as the amount of gas that has been required for the Ethereum operations. We computed the price of the required gas in Euro based on the price at the evaluation time (22.12.2021). In Tables <xref rid="j_infor490_tab_002">2</xref>, <xref rid="j_infor490_tab_003">3</xref>, <xref rid="j_infor490_tab_004">4</xref>, <xref rid="j_infor490_tab_005">5</xref>, and <xref rid="j_infor490_tab_006">6</xref> we present the average values as well as standard deviations for times and prices of each operation. For testing, we used a public Ethereum test network called Rinkeby<xref ref-type="fn" rid="j_infor490_fn_002">2</xref><fn id="j_infor490_fn_002"><label><sup>2</sup></label>
<p>Rinkeby Website: <uri>https://www.rinkeby.io/</uri></p></fn>. We believe that our results are comparable to using the main Ethereum network; however, by using Rinkeby we do not have to pay for the smart contract transactions. We also used the public IPFS network with one node running on the local computer. After each run of the evaluation, we have used the IPFS garbage collector to clear the cache of the local IPFS node. By doing so, we have ensured that the cached data from the previous runs had no effect on the next ones.</p>
<p>In our tests, we evaluated the effect of consistency checking separately from the main tests. That is because we want our main tests to reflect the effects that the use of blockchain has on the performance of the system working with large ontologies. Our tests have shown that consistency checking in Apache Jena becomes memory intensive when working with large ontologies, which prevents us from running consistency checking on our entire ontology.</p>
</sec>
<sec id="j_infor490_s_017">
<label>5.2</label>
<title>Evaluation Ontology</title>
<p>For testing the transaction manager, we needed a large ontology to demonstrate common use scenarios. By using a large ontology we can demonstrate the performance of our system for larger projects. There are several such ontologies that are publicly available. We decided to use the DBpedia (Lehmann <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor490_ref_019">2015</xref>) since it is one of the most well-known general knowledge ontologies. We decided to only load the parts of DBPedia, necessary for running our test queries. The final size of the database was 2.8 GB. The parts that we used are: (1) the ontology structure, (2) home pages of resources, (3) numerical properties of entities, and (4) entity types. By including these parts of the ontology, our database contained all of the entities, their numeric properties, home pages, and types. The evaluation ontology, therefore, contained approximately 7 million entities of about 800 different types with around 3000 different properties. Approximately 6.5 million of the entities fall under one of the DBpedia types, while the rest have a type from another ontology. Altogether there were around 9 million triplets in our testing ontology.</p>
</sec>
<sec id="j_infor490_s_018">
<label>5.3</label>
<title>Initialization</title>
<p>During the initialization, the smart contract was first published to the Ethereum network and then all four parts of the data from DBpedia were stored in the local database. The files required for the initialization of the ontology were uploaded to the IPFS network, so they can be retrieved by anyone using their identifiers. The IPFS identifiers were then stored on the blockchain using the smart contract. We compared this with the initialization process when only using the Apache Jena library without the blockchain. The times and gas cost of each operation is presented in Table <xref rid="j_infor490_tab_002">2</xref>. In this scenario, the steps for publishing the initial ontology to the IPFS and storing the IPFS identifiers in the smart contract were performed in four steps. In the table, we present the sum of all four times and prices. The reason for the four parts is that we used four parts of the DBpedia in our testing and each part is stored in a separate file.</p>
<table-wrap id="j_infor490_tab_002">
<label>Table 2</label>
<caption>
<p>The time required and the cost of performing an initialization of the transaction management system with the DBpedia ontology. The columns under “Blockchain transaction manager” describe the performance of our system, while the last column describes only using local ontology without blockchain. The steps “Publishing initial data to IPFS” and “Publishing identifiers” were performed in four parts, since we have four initial files.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin"/>
<td colspan="3" style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Blockchain transaction manager</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Apache Jena</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Operation</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Time [s]</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Gas used</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Price [€]</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Time [s]</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Loading initial data to Jena</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_001"><alternatives><mml:math>
<mml:mn>311</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>14</mml:mn></mml:math><tex-math><![CDATA[$311\pm 14$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_002"><alternatives><mml:math>
<mml:mn>311</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>14</mml:mn></mml:math><tex-math><![CDATA[$311\pm 14$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Publishing the smart contract</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_003"><alternatives><mml:math>
<mml:mn>17</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.11</mml:mn></mml:math><tex-math><![CDATA[$17\pm 0.11$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_004"><alternatives><mml:math>
<mml:mn>310149</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$310149\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_005"><alternatives><mml:math>
<mml:mn>1.09</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$1.09\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Publishing initial data to IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_006"><alternatives><mml:math>
<mml:mn>9.52</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.17</mml:mn></mml:math><tex-math><![CDATA[$9.52\pm 0.17$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Publishing identifiers</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_007"><alternatives><mml:math>
<mml:mn>70</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>10</mml:mn></mml:math><tex-math><![CDATA[$70\pm 10$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_008"><alternatives><mml:math>
<mml:mn>395652</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$395652\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_009"><alternatives><mml:math>
<mml:mn>1.39</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$1.39\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><bold>Total</bold></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_010"><alternatives><mml:math>
<mml:mn mathvariant="bold">407</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">13</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{407}\boldsymbol{\pm }\mathbf{13}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_011"><alternatives><mml:math>
<mml:mn mathvariant="bold">705801</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">0</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{705801}\boldsymbol{\pm }\mathbf{0}\mathbf{.}\mathbf{0}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_012"><alternatives><mml:math>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">47</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">0</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{2}\mathbf{.}\mathbf{47}\boldsymbol{\pm }\mathbf{0}\mathbf{.}\mathbf{0}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_013"><alternatives><mml:math>
<mml:mn mathvariant="bold">311</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">14</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{311}\boldsymbol{\pm }\mathbf{14}$]]></tex-math></alternatives></inline-formula></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Most of the time was spent loading the data to the Jena TDB database. This part has to be performed even if we are only using a local ontology without the blockchain. The reason for a slow operation is that our initial ontology contains a large amount of data, which requires a substantial amount of processing before it can be used. In addition to that, we have to perform blockchain synchronization steps in our implementation which take about two minutes.</p>
</sec>
<sec id="j_infor490_s_019">
<label>5.4</label>
<title>Running a Query</title>
<p>The most common operation is running a query. The steps required to run a query are described in Section <xref rid="j_infor490_s_012">4.3</xref>. We evaluated the performance of this scenario by running three queries. The first query only retrieved values and did not change the data, so the smart contract did not get updated. The second query performed the insert operation, and the third query deleted an entity in the ontology. The final two queries changed the ontology so they had to be stored on the IPFS and recorded in the smart contract. The time required to run each query is presented in Table <xref rid="j_infor490_tab_003">3</xref>. The select query (1) is performed locally and does not require a blockchain update. The insert query is first performed locally (2a), then the query is uploaded to the IPFS network (2b) and stored by an identifier. Finally, the identifier is stored on the blockchain using the smart contract (2c). The same process is used for the delete query (3a–3c).</p>
<table-wrap id="j_infor490_tab_003">
<label>Table 3</label>
<caption>
<p>Time spent on each of the test queries for the implementation using Ethereum blockchain (columns under “Blockchain transaction manager”) and a local Apache Jena instance with no blockchain (last column). We performed three queries (written in bold). Insert and delete queries require multiple steps so operations 2a–2c and 3a–3c show data for individual steps.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin"/>
<td colspan="3" style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Blockchain transaction manager</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Apache Jena</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Operation</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Time [s]</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Gas used</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Price [€]</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Time [s]</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left"><bold>1: SELECT</bold></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_014"><alternatives><mml:math>
<mml:mn>1.28</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.26</mml:mn></mml:math><tex-math><![CDATA[$1.28\pm 0.26$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_015"><alternatives><mml:math>
<mml:mn>1.28</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.26</mml:mn></mml:math><tex-math><![CDATA[$1.28\pm 0.26$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">2a: INSERT local</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_016"><alternatives><mml:math>
<mml:mn>0.41</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.03</mml:mn></mml:math><tex-math><![CDATA[$0.41\pm 0.03$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_017"><alternatives><mml:math>
<mml:mn>0.41</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.03</mml:mn></mml:math><tex-math><![CDATA[$0.41\pm 0.03$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">2b: INSERT upload to IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_018"><alternatives><mml:math>
<mml:mn>0.2</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.03</mml:mn></mml:math><tex-math><![CDATA[$0.2\pm 0.03$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">2c: INSERT save to Ethereum</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_019"><alternatives><mml:math>
<mml:mn>17</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>4.54</mml:mn></mml:math><tex-math><![CDATA[$17\pm 4.54$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_020"><alternatives><mml:math>
<mml:mn>94677</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$94677\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_021"><alternatives><mml:math>
<mml:mn>0.33</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.33\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><bold>2: INSERT total</bold></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_022"><alternatives><mml:math>
<mml:mn>18</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>4.52</mml:mn></mml:math><tex-math><![CDATA[$18\pm 4.52$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_023"><alternatives><mml:math>
<mml:mn>94677</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$94677\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_024"><alternatives><mml:math>
<mml:mn>0.33</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.33\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_025"><alternatives><mml:math>
<mml:mn>0.41</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.03</mml:mn></mml:math><tex-math><![CDATA[$0.41\pm 0.03$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">3a: DELETE local</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_026"><alternatives><mml:math>
<mml:mn>0.42</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.01</mml:mn></mml:math><tex-math><![CDATA[$0.42\pm 0.01$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_027"><alternatives><mml:math>
<mml:mn>0.42</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.01</mml:mn></mml:math><tex-math><![CDATA[$0.42\pm 0.01$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">3b: DELETE upload to IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_028"><alternatives><mml:math>
<mml:mn>0.2</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.02</mml:mn></mml:math><tex-math><![CDATA[$0.2\pm 0.02$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">3c: DELETE save to Ethereum</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_029"><alternatives><mml:math>
<mml:mn>16</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.15</mml:mn></mml:math><tex-math><![CDATA[$16\pm 0.15$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_030"><alternatives><mml:math>
<mml:mn>111777</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$111777\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_031"><alternatives><mml:math>
<mml:mn>0.39</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.39\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><bold>3: DELETE Total</bold></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_032"><alternatives><mml:math>
<mml:mn>16</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.15</mml:mn></mml:math><tex-math><![CDATA[$16\pm 0.15$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_033"><alternatives><mml:math>
<mml:mn>111777</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$111777\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_034"><alternatives><mml:math>
<mml:mn>0.39</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.39\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_035"><alternatives><mml:math>
<mml:mn>0.42</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.01</mml:mn></mml:math><tex-math><![CDATA[$0.42\pm 0.01$]]></tex-math></alternatives></inline-formula></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The query for retrieving data took a similar amount of time compared to only running locally without the blockchain. This was expected since we only use the local database to retrieve the data. The two queries for inserting and deleting data both took significantly longer to complete on our implementation than on a system only using Apache Jena. This was also expected since changes to the ontology require the creation of a record on the blockchain and communication with the IPFS network. Most of the time required for these queries was used for updating the smart contract.</p>
</sec>
<sec id="j_infor490_s_020">
<label>5.5</label>
<title>Rebuilding the Ontology After a Data Loss</title>
<p>One of the advantages of using blockchain is that we can recover the entire ontology in the event of a data loss. To showcase that, our third test was a complete recovery of the ontology. This is done in three steps. First, the IPFS identifiers are retrieved from the blockchain. Since this is only a read operation, it can be performed quickly and does not require gas payment. After that, the data is downloaded from the IPFS network. Finally, the data is loaded to the Jena database. These three steps are repeated first for the initial data and second for the transactions that were applied on top of the initial database. Times for all parts of the operation are presented in Table <xref rid="j_infor490_tab_004">4</xref>. Just like in the initialization scenario, most of the time is spent loading the ontology to Jena. This is expected since the ontology is still the same size. This is also the reason that the entire process of restoring the ontology from the blockchain takes a similar amount of time compared to the loading of initial data in the initialization of the ontology in Section <xref rid="j_infor490_s_018">5.3</xref>.</p>
<table-wrap id="j_infor490_tab_004">
<label>Table 4</label>
<caption>
<p>Time andcost of each operation required for rebuilding an ontology from blockchain. Since all of the performed operations only read data, they do not require payment. The implementation without blockchain cannot perform this scenario.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Operation</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Time [s]</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Gas used</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Price [€]</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Read IPFS IDs from Ethereum</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_036"><alternatives><mml:math>
<mml:mn>0.59</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.02</mml:mn></mml:math><tex-math><![CDATA[$0.59\pm 0.02$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Download initial ontology from IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_037"><alternatives><mml:math>
<mml:mn>0.59</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.02</mml:mn></mml:math><tex-math><![CDATA[$0.59\pm 0.02$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Apply initial ontology to local DB</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_038"><alternatives><mml:math>
<mml:mn>309</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>9.87</mml:mn></mml:math><tex-math><![CDATA[$309\pm 9.87$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Get update IDs from Ethereum</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_039"><alternatives><mml:math>
<mml:mn>0.15</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.15\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Download update queries from IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_040"><alternatives><mml:math>
<mml:mn>0.02</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.01</mml:mn></mml:math><tex-math><![CDATA[$0.02\pm 0.01$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Apply update queries</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_041"><alternatives><mml:math>
<mml:mn>1.07</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.04</mml:mn></mml:math><tex-math><![CDATA[$1.07\pm 0.04$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><bold>Total</bold></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_042"><alternatives><mml:math>
<mml:mn mathvariant="bold">311</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">9</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">88</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{311}\boldsymbol{\pm }\mathbf{9}\mathbf{.}\mathbf{88}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">/</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">/</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>When recovering an ontology, we can also choose to only apply changes up to a certain point. This way we can get an ontology from a certain time instead of using the latest one. A user could also use our system to create a new branch of the ontology. Creating a branch requires the creation of a new Ethereum smart contract.</p>
</sec>
<sec id="j_infor490_s_021">
<label>5.6</label>
<title> Collaboration Between Users</title>
<p>Our final test was designed to simulate collaborative editing of an ontology. We created two separate users A and B each with their own Ethereum wallet. The users then edited the ontology together. This scenario is constructed from previous scenarios. In the first step, user A initializes the ontology. The steps required for the initialization are shown in Section <xref rid="j_infor490_s_018">5.3</xref>. User A then performs a delete query. The steps required for the delete operation are presented in Section <xref rid="j_infor490_s_019">5.4</xref>. After that, user B reconstructs the ontology from the blockchain as is shown in Section <xref rid="j_infor490_s_020">5.5</xref>. User B then executes an insert query adding an element to the ontology. The steps for the insert query are presented in more detail in Section <xref rid="j_infor490_s_019">5.4</xref>. After that, user A updates their local ontology to the latest version by reading the identifier of the change performed by B from the blockchain, downloading the query from the IPFS network, and executing it on the local ontology. Finally, user A performs a select query to confirm that the change is visible. Times and prices of each operation are presented in Table <xref rid="j_infor490_tab_005">5</xref>. This scenario is also not possible if we are not using the blockchain. Because of that, we do not present the results for the basic Apache Jena implementation without our modifications.</p>
<table-wrap id="j_infor490_tab_005">
<label>Table 5</label>
<caption>
<p>Time andcost of each step in the collaborative ontology editing scenario. The implementation without blockchain cannot perform this scenario.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Operation</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Time [s]</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Gas used</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Price [€]</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">A initializes the ontology</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_043"><alternatives><mml:math>
<mml:mn>407</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>13</mml:mn></mml:math><tex-math><![CDATA[$407\pm 13$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_044"><alternatives><mml:math>
<mml:mn>705801</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$705801\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_045"><alternatives><mml:math>
<mml:mn>2.47</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$2.47\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">A executes DELETE query</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_046"><alternatives><mml:math>
<mml:mn>16</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.15</mml:mn></mml:math><tex-math><![CDATA[$16\pm 0.15$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_047"><alternatives><mml:math>
<mml:mn>111777</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$111777\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_048"><alternatives><mml:math>
<mml:mn>0.39</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.39\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">B loads ontology from blockchain</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_049"><alternatives><mml:math>
<mml:mn>311</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>9.88</mml:mn></mml:math><tex-math><![CDATA[$311\pm 9.88$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">B executes INSERT query</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_050"><alternatives><mml:math>
<mml:mn>18</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>4.52</mml:mn></mml:math><tex-math><![CDATA[$18\pm 4.52$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_051"><alternatives><mml:math>
<mml:mn>94677</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$94677\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_052"><alternatives><mml:math>
<mml:mn>0.33</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.33\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">A reads IDs from the blockchain</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_053"><alternatives><mml:math>
<mml:mn>0.16</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.02</mml:mn></mml:math><tex-math><![CDATA[$0.16\pm 0.02$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">A downloads data from IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_054"><alternatives><mml:math>
<mml:mn>0.02</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.02\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">A applies changes locally</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_055"><alternatives><mml:math>
<mml:mn>1.06</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.03</mml:mn></mml:math><tex-math><![CDATA[$1.06\pm 0.03$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">A executes a SELECT query</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_056"><alternatives><mml:math>
<mml:mn>1.28</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.26</mml:mn></mml:math><tex-math><![CDATA[$1.28\pm 0.26$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><bold>Total</bold></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_057"><alternatives><mml:math>
<mml:mn mathvariant="bold">736</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">15</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{736}\boldsymbol{\pm }\mathbf{15}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_058"><alternatives><mml:math>
<mml:mn mathvariant="bold">912255</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">0</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{912255}\boldsymbol{\pm }\mathbf{0}\mathbf{.}\mathbf{0}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_059"><alternatives><mml:math>
<mml:mn mathvariant="bold">3</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">0</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{3}\mathbf{.}\mathbf{2}\boldsymbol{\pm }\mathbf{0}\mathbf{.}\mathbf{0}$]]></tex-math></alternatives></inline-formula></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Most of the time in this scenario is used for initialization of the ontology for both users. In real use, this is not a big issue, since the ontology only has to be initialized once. Another operation that requires a relatively long time is the execution of queries that change the ontology data. The long time is the result of limitations with Ethereum smart contracts. This can be improved by combining larger changes into one transaction. The operations that require only read operations are performed quickly.</p>
<p>In this test, each user had their own local Semantic database. It is also possible to share a single local Semantic database amongst multiple users. In this case, it is especially important that all changes to the content of the database are done through our transaction manager. If a user changes the database directly, the change does not get recorded on the blockchain so we get an inconsistency between the local ontology and the one stored on the blockchain. This inconsistency can be later resolved by restoring the ontology from the blockchain. In our implementation, we recommend the use of Apache Jena TDB as the database for storing the ontology. However, the proposed transaction management system could also work with any other Semantic database.</p>
<p>Each change of the ontology gets executed as a transaction, where all changes get reverted in case of an error at any point. In the proposed implementation the changes are synchronized with the blockchain before each set of queries that the user requests. The synchronization is done by checking for new changes on the blockchain. After that, the new queries are loaded from the IPFS network and applied to the local database. Another option for the implementation would be to synchronize the local ontology with the one stored on the blockchain in real-time as the changes get made. In both cases, we get the latest version of the ontology before the new change gets applied. This is important since we could get an inconsistent state of the ontology if the local database would not contain the same information that is stored on the blockchain. Lastly, the transaction gets committed and new changes get recorded on the blockchain.</p>
</sec>
<sec id="j_infor490_s_022">
<label>5.7</label>
<title>Consistency Checking</title>
<p>We performed an additional scenario to test the effects that consistency checking has on the performance of the system. In this test, we only loaded three out of four parts of our ontology, because consistency checking over the entire ontology was too memory intensive. For consistency checking, we used transitive rules. In this scenario, the user first loads the initial ontology and checks for consistency. The initial ontology is then uploaded to IPFS and the Ethereum network. After that, the user performs a SELECT and a DELETE query. These queries were selected to demonstrate the effect of consistency checking on a query that only reads the data and on a query that also changes the data. After the DELETE query, consistency is checked again. After that the update is also uploaded to the IPFS and to the Ethereum network. The time and payment required for each step of the process are presented in Table <xref rid="j_infor490_tab_006">6</xref>.</p>
<table-wrap id="j_infor490_tab_006">
<label>Table 6</label>
<caption>
<p>Time andcost of each step in the consistency checking scenario. Some operations perform smart contract functions and require gas payment.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Operation</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Time [s]</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Gas used</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Price [€]</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Loading initial data to Jena</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_060"><alternatives><mml:math>
<mml:mn>80</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>2.92</mml:mn></mml:math><tex-math><![CDATA[$80\pm 2.92$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Checking consistency</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_061"><alternatives><mml:math>
<mml:mn>25</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.83</mml:mn></mml:math><tex-math><![CDATA[$25\pm 0.83$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Publishing the smart contract</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_062"><alternatives><mml:math>
<mml:mn>17</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.09</mml:mn></mml:math><tex-math><![CDATA[$17\pm 0.09$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_063"><alternatives><mml:math>
<mml:mn>310149</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$310149\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_064"><alternatives><mml:math>
<mml:mn>1.09</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$1.09\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Publishing initial data to IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_065"><alternatives><mml:math>
<mml:mn>3.35</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.13</mml:mn></mml:math><tex-math><![CDATA[$3.35\pm 0.13$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Publishing identifiers</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_066"><alternatives><mml:math>
<mml:mn>49</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>5.26</mml:mn></mml:math><tex-math><![CDATA[$49\pm 5.26$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_067"><alternatives><mml:math>
<mml:mn>301014</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$301014\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_068"><alternatives><mml:math>
<mml:mn>1.06</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$1.06\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Perform SELECT query</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_069"><alternatives><mml:math>
<mml:mn>0.18</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.02</mml:mn></mml:math><tex-math><![CDATA[$0.18\pm 0.02$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Perform DELETE query</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_070"><alternatives><mml:math>
<mml:mn>0.02</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.02\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Checking consistency after update</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_071"><alternatives><mml:math>
<mml:mn>151</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>4.87</mml:mn></mml:math><tex-math><![CDATA[$151\pm 4.87$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Upload query to IPFS</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_072"><alternatives><mml:math>
<mml:mn>0.22</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.01</mml:mn></mml:math><tex-math><![CDATA[$0.22\pm 0.01$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left">/</td>
<td style="vertical-align: top; text-align: left">/</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Save identifier to Ethereum</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_073"><alternatives><mml:math>
<mml:mn>16</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.21</mml:mn></mml:math><tex-math><![CDATA[$16\pm 0.21$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_074"><alternatives><mml:math>
<mml:mn>111777</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$111777\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor490_ineq_075"><alternatives><mml:math>
<mml:mn>0.39</mml:mn>
<mml:mo>±</mml:mo>
<mml:mn>0.0</mml:mn></mml:math><tex-math><![CDATA[$0.39\pm 0.0$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><bold>Total</bold></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_076"><alternatives><mml:math>
<mml:mn mathvariant="bold">492</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">11</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{492}\boldsymbol{\pm }\mathbf{11}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_077"><alternatives><mml:math>
<mml:mn mathvariant="bold">722940</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">0</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{722940}\boldsymbol{\pm }\mathbf{0}\mathbf{.}\mathbf{0}$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor490_ineq_078"><alternatives><mml:math>
<mml:mn mathvariant="bold">2</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">53</mml:mn>
<mml:mo mathvariant="bold">±</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mi mathvariant="bold">.</mml:mi>
<mml:mn mathvariant="bold">0</mml:mn></mml:math><tex-math><![CDATA[$\mathbf{2}\mathbf{.}\mathbf{53}\boldsymbol{\pm }\mathbf{0}\mathbf{.}\mathbf{0}$]]></tex-math></alternatives></inline-formula></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Checking the ontology consistency requires less time than the initialization of the ontology. On the other hand, we have observed that the memory required to perform a consistency check becomes an issue with large ontologies. The consistency check also has to be performed after each query that changes the data. We believe that the benefits of using consistency checking outweigh the performance cost when editing smaller ontologies. When working with larger ontologies, for example, the entire DBpedia, the consistency checking is too demanding for practical use. This is not a limitation of our transaction manager, but rather of the Apache Jena framework.</p>
</sec>
</sec>
<sec id="j_infor490_s_023">
<label>6</label>
<title>Conclusion and Future Work</title>
<p>We propose a system for ontology management that uses the Ethereum and the IPFS networks to track changes and enable collaborative ontology building (Gašperlin, <xref ref-type="bibr" rid="j_infor490_ref_013">2021</xref>). We tested our implementation on several scenarios and compared the results to an implementation without the distributed management part. Based on the results we conclude that the biggest bottleneck when using our system is the time required to change the smart contract on the Ethereum network. This means that each query that changes the data, takes between 15 and 30 seconds. This is a limitation of using Ethereum and can be circumvented by combining multiple changes into a single transaction since the time remains mostly the same regardless of the size of the transaction. By using the Ethereum smart contract we also get multiple advantages, that would be difficult to achieve otherwise. The system is completely decentralized and does not require any centralized servers or storage. We can track the history of every change that can not be changed by anyone. We can also track the author of each change in a tamper-resistant way.</p>
<p>One option for speeding up the operation might be to store the IPFS identifiers in another way. We could, for instance, store them in a file with a static address on the IPFS network. By doing so, the amount of time required to publish a transaction would decrease; however, we would lose the protection against changes to the recorded history. In addition to that, we would no longer have a tamper-resistant way of recording the author of each change.</p>
<p>In our current implementation, consistency is checked in the program before a change is sent to the smart contract. This means that an adversary could bypass the check and publish a change that breaks the ontology consistency. For future research, we propose a voting mechanism that would require enough trusted users to approve the consistency of a change in order for the change to get applied to the ontology. This would prevent anyone from applying inconsistent changes.</p>
</sec>
</body>
<back>
<ref-list id="j_infor490_reflist_001">
<title>References</title>
<ref id="j_infor490_ref_001">
<mixed-citation publication-type="other"><string-name><surname>Apache Jena</surname></string-name> (2021). Reasoners and rule engines. <uri>https://jena.apache.org/documentation/inference/</uri>. [Accessed 13. 03. 2022].</mixed-citation>
</ref>
<ref id="j_infor490_ref_002">
<mixed-citation publication-type="other"><string-name><surname>Benet</surname>, <given-names>J.</given-names></string-name> (2014). IPFS – Content Addressed, Versioned, P2P File System. <italic>CoRR</italic>, <italic>abs/1407.3561</italic>. <uri>http://arxiv.org/abs/1407.3561</uri>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_003">
<mixed-citation publication-type="other"><string-name><surname>Binance team</surname></string-name> (2022). Introducing BNB Chain: The Evolution of Binance Smart Chain. <uri>https://www.binance.com/en/blog/ecosystem/introducing-bnb-chain-the-evolution-of-binance-smart-chain-421499824684903434</uri>. [Accessed 11.03.2022].</mixed-citation>
</ref>
<ref id="j_infor490_ref_004">
<mixed-citation publication-type="chapter"><string-name><surname>Bollacker</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Evans</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Paritosh</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Sturge</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Taylor</surname>, <given-names>J.</given-names></string-name> (<year>2008</year>). <chapter-title>Freebase: a collaboratively created graph database for structuring human knowledge</chapter-title>. In: <source>Proceedings of the 2008 ACM SIGMOD International Conference on Management of Data</source>, pp. <fpage>1247</fpage>–<lpage>1250</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_005">
<mixed-citation publication-type="other"><string-name><surname>Buterin</surname>, <given-names>V.</given-names></string-name> (2014). A next-generation smart contract and decentralized application platform. <italic>White Paper</italic>, <italic>3</italic>(37).</mixed-citation>
</ref>
<ref id="j_infor490_ref_006">
<mixed-citation publication-type="chapter"><string-name><surname>Cano-Benito</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Cimmino</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>García-Castro</surname>, <given-names>R.</given-names></string-name> (<year>2019</year>). <chapter-title>Towards blockchain and semantic web</chapter-title>. In: <source>International Conference on Business Information Systems</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>220</fpage>–<lpage>231</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_007">
<mixed-citation publication-type="other"><string-name><surname>Choi</surname>, <given-names>S.-M.</given-names></string-name>, <string-name><surname>Park</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Nguyen</surname>, <given-names>Q.</given-names></string-name>, <string-name><surname>Cronje</surname>, <given-names>A.</given-names></string-name> (2018). Fantom: a scalable framework for asynchronous distributed systems. arXiv preprint <ext-link ext-link-type="uri" xlink:href="http://arxiv.org/abs/arXiv:1810.10360">arXiv:1810.10360</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_008">
<mixed-citation publication-type="journal"><string-name><surname>Decker</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Melnik</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Van Harmelen</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Fensel</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Klein</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Broekstra</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Erdmann</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Horrocks</surname>, <given-names>I.</given-names></string-name> (<year>2000</year>). <article-title>The semantic web: the roles of XML and RDF</article-title>. <source>IEEE Internet Computing</source>, <volume>4</volume>(<issue>5</issue>), <fpage>63</fpage>–<lpage>73</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_009">
<mixed-citation publication-type="journal"><string-name><surname>Donnelly</surname>, <given-names>K.</given-names></string-name> (<year>2006</year>). <article-title>SNOMED-CT: the advanced terminology and coding system for eHealth</article-title>. <source>Studies in Health Technology and Informatics</source>, <volume>121</volume>, <fpage>279</fpage>–<lpage>290</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_010">
<mixed-citation publication-type="other"><string-name><surname>Edelman</surname>, <given-names>G.</given-names></string-name> (2021). The Father of Web3 Wants You to Trust Less. <ext-link ext-link-type="uri" xlink:href="https://www.wired.com/story/web3-gavin-wood-interview/">https://www.wired.com/story/web3-gavin-wood-interview/</ext-link>. [Accessed 30.5.2022].</mixed-citation>
</ref>
<ref id="j_infor490_ref_011">
<mixed-citation publication-type="journal"><string-name><surname>Efanov</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Roschin</surname>, <given-names>P.</given-names></string-name> (<year>2018</year>). <article-title>The all-pervasiveness of the blockchain technology</article-title>. <source>Procedia Computer Science</source>, <volume>123</volume>, <fpage>116</fpage>–<lpage>121</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1016/j.procs.2018.01.019" xlink:type="simple">https://doi.org/10.1016/j.procs.2018.01.019</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_012">
<mixed-citation publication-type="chapter"><string-name><surname>English</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Auer</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Domingue</surname>, <given-names>J.</given-names></string-name> (<year>2016</year>). <chapter-title>Block chain technologies &amp; the semantic web: a framework for symbiotic development</chapter-title>. In: <string-name><surname>Lehmann</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Thakkar</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Halilaj</surname>, <given-names>L.</given-names></string-name>, <string-name><surname>Asmat</surname>, <given-names>R.</given-names></string-name> (Eds.), <source>Computer Science Conference for University of Bonn Students</source>, pp. <fpage>47</fpage>–<lpage>61</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_013">
<mixed-citation publication-type="other"><string-name><surname>Gašperlin</surname>, <given-names>D.</given-names></string-name> (2021). Blockchain-based ontology database implementation. <uri>https://github.com/UL-FRI-Zitnik/blockchain-based-ontology-database</uri>. [Accessed 29.12.2021].</mixed-citation>
</ref>
<ref id="j_infor490_ref_014">
<mixed-citation publication-type="journal"><string-name><surname>Haber</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Stornetta</surname>, <given-names>W.S.</given-names></string-name> (<year>1991</year>). <article-title>How to time-stamp a digital document</article-title>. <source>Journal of Cryptology</source>, <volume>3</volume>(<issue>2</issue>), <fpage>99</fpage>–<lpage>111</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1007/BF00196791" xlink:type="simple">https://doi.org/10.1007/BF00196791</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_015">
<mixed-citation publication-type="other"><string-name><surname>Hector</surname>, <given-names>U.</given-names></string-name>, <string-name><surname>Boris</surname>, <given-names>C.</given-names></string-name> (2020). BLONDiE: Blockchain Ontology with Dynamic Extensibility. <italic>CoRR</italic>, <italic>abs/2008.09518</italic>. <uri>https://arxiv.org/abs/2008.09518</uri>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_016">
<mixed-citation publication-type="journal"><string-name><surname>Horrocks</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Patel-Schneider</surname>, <given-names>P.F.</given-names></string-name>, <string-name><surname>Van Harmelen</surname>, <given-names>F.</given-names></string-name> (<year>2003</year>). <article-title>From SHIQ and RDF to OWL: the making of a web ontology language</article-title>. <source>Journal of Web Semantics</source>, <volume>1</volume>(<issue>1</issue>), <fpage>7</fpage>–<lpage>26</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_017">
<mixed-citation publication-type="chapter"><string-name><surname>Jianjun</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Ming</surname>, <given-names>L.</given-names></string-name>, <string-name><surname>Jingang</surname>, <given-names>M.</given-names></string-name> (<year>2020</year>). <chapter-title>Research and application of data sharing platform integrating Ethereum and IPFS Technology</chapter-title>. In: <source>2020 19th International Symposium on Distributed Computing and Applications for Business Engineering and Science (DCABES)</source>, pp. <fpage>279</fpage>–<lpage>282</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/DCABES50732.2020.00079" xlink:type="simple">https://doi.org/10.1109/DCABES50732.2020.00079</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_018">
<mixed-citation publication-type="chapter"><string-name><surname>Khattak</surname>, <given-names>A.M.</given-names></string-name>, <string-name><surname>Latif</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Han</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Lee</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Lee</surname>, <given-names>Y.-K.</given-names></string-name>, <string-name><surname>Kim</surname>, <given-names>H.-I.</given-names></string-name> (<year>2009</year>). <chapter-title>Change tracer: tracking changes in web ontologies</chapter-title>. In: <source>2009 21st IEEE International Conference on Tools with Artificial Intelligence</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>449</fpage>–<lpage>456</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/ICTAI.2009.42" xlink:type="simple">https://doi.org/10.1109/ICTAI.2009.42</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_019">
<mixed-citation publication-type="journal"><string-name><surname>Lehmann</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Isele</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Jakob</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Jentzsch</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Kontokostas</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Mendes</surname>, <given-names>P.N.</given-names></string-name>, <string-name><surname>Hellmann</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Morsey</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>van Kleef</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Auer</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Bizer</surname>, <given-names>C.</given-names></string-name> (<year>2015</year>). <article-title>DBpedia – a large-scale, multilingual knowledge base extracted from Wikipedia</article-title>. <source>Semantic Web</source>, <volume>6</volume>(<issue>2</issue>), <fpage>167</fpage>–<lpage>195</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.3233/SW-140134" xlink:type="simple">https://doi.org/10.3233/SW-140134</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_020">
<mixed-citation publication-type="other"><string-name><surname>Liang</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Alani</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Shadbolt</surname>, <given-names>N.</given-names></string-name> (2005). Ontology change management in protégé. In: <italic>Proceedings of the 1st AKT Doctoral Symposium, June 2005</italic>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_021">
<mixed-citation publication-type="other"><string-name><surname>Markovic</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Edwards</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Jacobs</surname>, <given-names>N.</given-names></string-name> (2019). Recording provenance of food delivery using IoT, semantics and business blockchain networks. In: <italic>2019 6th International Conference on Internet of Things: Systems, Management and Security</italic>, <italic>IOTSMS 2019</italic>, pp. 116–118.</mixed-citation>
</ref>
<ref id="j_infor490_ref_022">
<mixed-citation publication-type="chapter"><string-name><surname>McBride</surname>, <given-names>B.</given-names></string-name> (<year>2004</year>). <chapter-title>The Resource Description Framework (RDF) and its vocabulary description language RDFS</chapter-title>. In: <source>Handbook on Ontologies</source>. <publisher-name>Springer</publisher-name>, <publisher-loc>Berlin Heidelberg</publisher-loc>, pp. <fpage>51</fpage>–<lpage>65</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1007/978-3-540-24750-0_3" xlink:type="simple">https://doi.org/10.1007/978-3-540-24750-0_3</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_023">
<mixed-citation publication-type="journal"><string-name><surname>McGuinness</surname>, <given-names>D.L.</given-names></string-name>, <string-name><surname>Van Harmelen</surname>, <given-names>F.</given-names></string-name> (<year>2004</year>). <article-title>OWL web ontology language overview</article-title>. <source>W3C Recommendation</source>, <volume>10</volume>(<issue>10</issue>), <fpage>2004</fpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_024">
<mixed-citation publication-type="chapter"><string-name><surname>Naim</surname>, <given-names>B.A.</given-names></string-name>, <string-name><surname>Klas</surname>, <given-names>W.</given-names></string-name> (<year>2019</year>). <chapter-title>Knowledge graph-enhanced blockchains by integrating a graph-data service-layer</chapter-title>. In: <source>2019 6th International Conference on Internet of Things: Systems, Management and Security, IOTSMS 2019</source>, pp. <fpage>420</fpage>–<lpage>427</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_025">
<mixed-citation publication-type="other"><string-name><surname>Nakamoto</surname>, <given-names>S.</given-names></string-name> (2009). Bitcoin: a peer-to-peer electronic cash system. <italic>cryptography – The Cryptography and Cryptography Policy Mailing List</italic>, <uri>https://metzdowd.com</uri>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_026">
<mixed-citation publication-type="journal"><string-name><surname>Nizamuddin</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Salah</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Azad</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Arshad</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Habib ur Rehman</surname>, <given-names>M.</given-names></string-name> (<year>2019</year>). <article-title>Decentralized document version control using Ethereum blockchain and IPFS</article-title>. <source>Computers &amp; Electrical Engineering</source>, <volume>76</volume>, <fpage>183</fpage>–<lpage>197</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1016/j.compeleceng.2019.03.014" xlink:type="simple">https://doi.org/10.1016/j.compeleceng.2019.03.014</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_027">
<mixed-citation publication-type="other"><string-name><surname>Noy</surname>, <given-names>N.F.</given-names></string-name>, <string-name><surname>McGuinness</surname>, <given-names>D.L.</given-names></string-name> (2001). Ontology development 101: a guide to creating your first ontology. <italic>Knowledge Systems Laboratory</italic>, <italic>32</italic>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_028">
<mixed-citation publication-type="chapter"><string-name><surname>Pérez</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Arenas</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Gutierrez</surname>, <given-names>C.</given-names></string-name> (<year>2006</year>). <chapter-title>Semantics and complexity of SPARQL</chapter-title>. In: <source>International Semantic Web Conference</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>30</fpage>–<lpage>43</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_029">
<mixed-citation publication-type="other"><string-name><surname>Preston</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>LeDuc Díaz</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Diesler</surname>, <given-names>T.</given-names></string-name> (2020). java-ipfs-http-client, GitHub. [Accessed 15.12.2021].</mixed-citation>
</ref>
<ref id="j_infor490_ref_030">
<mixed-citation publication-type="journal"><string-name><surname>Shadbolt</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Berners-Lee</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Hall</surname>, <given-names>W.</given-names></string-name> (<year>2006</year>). <article-title>The semantic web revisited</article-title>. <source>IEEE Intelligent Systems</source>, <volume>21</volume>(<issue>3</issue>), <fpage>96</fpage>–<lpage>101</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_031">
<mixed-citation publication-type="journal"><string-name><surname>Shortliffe</surname>, <given-names>E.</given-names></string-name> (<year>1976</year>). <article-title>Computer-based medical consultations: MYCIN</article-title>. <source>Artificial Intelligence – AI</source>, <volume>388</volume>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1097/00004669-197610000-00011" xlink:type="simple">https://doi.org/10.1097/00004669-197610000-00011</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_032">
<mixed-citation publication-type="other"><string-name><surname>Siemer</surname>, <given-names>S.</given-names></string-name> (2019). <italic>Exploring the Apache Jena Framework</italic>. Georg-August-University Göttingen.</mixed-citation>
</ref>
<ref id="j_infor490_ref_033">
<mixed-citation publication-type="chapter"><string-name><surname>Speer</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Havasi</surname>, <given-names>C.</given-names></string-name> (<year>2012</year>). <chapter-title>Representing general relational knowledge in conceptNet 5.</chapter-title> In: <source>Proceedings of the Eighth International Conference on Language Resources and Evaluation (LREC’12)</source> pp. <fpage>3679</fpage>–<lpage>3686</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_034">
<mixed-citation publication-type="chapter"><string-name><surname>Steichen</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Fiz</surname>, <given-names>B.</given-names></string-name>, <string-name><surname>Norvill</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Shbair</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>State</surname>, <given-names>R.</given-names></string-name> (<year>2018</year>). <chapter-title>Blockchain-based, decentralized access control for IPFS</chapter-title>. In: <source>2018 IEEE International Conference on Internet of Things (iThings) and IEEE Green Computing and Communications (GreenCom) and IEEE Cyber, Physical and Social Computing (CPSCom) and IEEE Smart Data (SmartData)</source>, pp. <fpage>1499</fpage>–<lpage>1506</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/Cybermatics_2018.2018.00253" xlink:type="simple">https://doi.org/10.1109/Cybermatics_2018.2018.00253</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_035">
<mixed-citation publication-type="journal"><string-name><surname>Stevens</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Goble</surname>, <given-names>C.A.</given-names></string-name>, <string-name><surname>Bechhofer</surname>, <given-names>S.</given-names></string-name> (<year>2000</year>). <article-title>Ontology-based knowledge representation for bioinformatics</article-title>. <source>Briefings in Bioinformatics</source>, <volume>1</volume>(<issue>4</issue>), <fpage>398</fpage>–<lpage>414</lpage>.</mixed-citation>
</ref>
<ref id="j_infor490_ref_036">
<mixed-citation publication-type="other"><string-name><surname>Taye</surname>, <given-names>M.M.</given-names></string-name> (2010). Understanding semantic web and ontologies: theory and applications. <italic>Journal of Computing</italic>, 2.</mixed-citation>
</ref>
<ref id="j_infor490_ref_037">
<mixed-citation publication-type="other"><string-name><surname>Ugarte</surname>, <given-names>H.</given-names></string-name> (2017). <italic>A More Pragmatic Web 3.0: Linked Blockchain Data</italic>. Bonn, Germany.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
