CINXE.COM

Overview — Semantic Search 4.2.0 documentation

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-11346334-10']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <title>Overview &#8212; Semantic Search 4.2.0 documentation</title> <link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="_static/css/bootstrap.min.css" type="text/css" /> <link rel="stylesheet" href="_static/css/bootstrap-ontotext-theme.css" type="text/css" /> <link rel="stylesheet" href="_static/css/custom.css" type="text/css" /> <script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> <script src="_static/jquery.js"></script> <script src="_static/underscore.js"></script> <script src="_static/doctools.js"></script> <script src="_static/language_data.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Quick Start" href="quick-start.html" /> <link rel="prev" title="Table of contents" href="toc.html" /> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'> <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'> <meta name="apple-mobile-web-app-capable" content="yes"> <!-- Favicon --> <link rel="apple-touch-icon" sizes="180x180" href="/semantic-search/4.2/_static/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="/semantic-search/4.2/_static/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/semantic-search/4.2/_static/favicon-16x16.png"> <link rel="manifest" type="application/manifest+json" href="/semantic-search/4.2/_static/site.webmanifest"> <script src="/semantic-search/4.2/_static/js/jquery-1.12.4.min.js"></script> <script src="/semantic-search/4.2/_static/js/jquery-fix.js"></script> <script src="/semantic-search/4.2/_static/bootstrap-sphinx.js"></script> <!--bootstrap 4 scripts--> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> <script type="text/javascript"> //temporary solution to remove sphinx css $(document).ready(function() { $("link[href*='basic.css']").remove(); $("link[href*='bootstrap-sphinx.css']").remove(); }); //hide the other collapsible elements on collapsing a menu item var $myGroup = $('#side-menu-accoridion'); $myGroup.on('show.bs.collapse','.collapse', function() { $myGroup.find('.collapse.show').collapse('hide'); }); $(function () { $('[data-toggle="tooltip"]').tooltip(); $('#scrollToTop').click( function() { $('html, body').animate({scrollTop: '0px'}, 300); }); }); </script> <!-- GraphiQL --> <script src="https://cdn.jsdelivr.net/react/15.4.2/react.min.js"></script> <script src="https://cdn.jsdelivr.net/react/15.4.2/react-dom.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/jazzyray/sphinx-graphiql@master/static/graphiql/graphiql.min.js"></script> <link href="https://cdn.jsdelivr.net/gh/jazzyray/sphinx-graphiql@master/static/graphiql/graphiql.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/gh/jazzyray/sphinx-graphiql@a048f5e9c6fb3932d7ba3bcea8c56e1d918903d0/static/styles.css" rel="stylesheet"> <script type="text/javascript"> // graphql query fetcher const graphQLFetcher = function(endpoint, token, insecure) { endpoint = endpoint || "https://swapi-platform.ontotext.com/graphql"; insecure = insecure || false return function(graphQLParams) { const params = { method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + token }, body: JSON.stringify(graphQLParams), credentials: 'include', insecure: true, }; return fetch(endpoint, params) .then(function (response) { return response.text(); }) .then(function (responseBody) { try { return JSON.parse(responseBody); } catch (error) { return responseBody; } }); } }; // create GraphiQL components and embed into HTML const setupGraphiQL = function() { if (typeof(React) === 'undefined' || typeof(ReactDOM) === 'undefined' || typeof(GraphiQL) === 'undefined') { return; } const targets = document.getElementsByClassName('graphiql'); for (let i = 0; i < targets.length; i++) { const target = targets[i]; const endpoint = target.getElementsByClassName("endpoint")[0].innerHTML.trim(); let token = target.getElementsByClassName("token") if ((token === null) || (token[0].innerHTML.trim() === "")) { // No token so default it to a pre-baked ReadOnly Token // Expires 23 Oct 2024 token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImJNODctcWV3SldXTWRMRjIzNUtXUmluTlp4TDA0ZngzIn0.eyJhdWQiOiI2NzJjYTdiMy1jMzcyLTRkZjMtODJkOC05YTFhMGQ3ZDY4YzEiLCJleHAiOjE3MjkyNDk4MTksImlhdCI6MTY5ODE0NTgxOSwiaXNzIjoic3dhcGktcGxhdGZvcm0ub250b3RleHQuY29tIiwic3ViIjoiZTlmOWQzNGQtZThmMS00ODM1LTlkMzAtOWRjNmU5YjQ4ZmMzIiwianRpIjoiODZjNTIzYzEtYzQzNC00MWZiLWFkOTctYWU2MDY5MjgxYWM4IiwiYXV0aGVudGljYXRpb25UeXBlIjoiUEFTU1dPUkQiLCJlbWFpbCI6InJlYWRvbmx5dXNlckBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJSZWFkT25seVVzZXIiLCJhcHBsaWNhdGlvbklkIjoiNjcyY2E3YjMtYzM3Mi00ZGYzLTgyZDgtOWExYTBkN2Q2OGMxIiwicm9sZXMiOlsiUmVhZE9ubHkiXSwiZGF0YSI6e319.yVwuhsZQQgbk6ASaaA5iS2z_E7ThqPpMtYKfxjVcND8" } else { token = token[0].innerHTML.trim(); } const insecure = target.getElementsByClassName("insecure")[0].innerHTML.trim(); const query = target.getElementsByClassName("query")[0].innerHTML.trim(); const response = target.getElementsByClassName("response")[0].innerHTML.trim(); const graphiQLElement = React.createElement(GraphiQL, { fetcher: graphQLFetcher(endpoint, token, insecure), schema: undefined, query: query, response: response, token: token }); ReactDOM.render(graphiQLElement, target); } }; $(document).ready(function() { // if graphiql elements present, setup graphiql if (document.getElementsByClassName('graphiql').length > 0) { setupGraphiQL(); } }) </script> <meta name="msapplication-TileImage" content="/search/documentation/home/images/visual_Logo_GraphDB_02_12_2015.png"> </head><body> <div id="page"> <div id="sidebar" class="bs-sidenav bg-lightgray" data-spy="affix"> <div class="hidden-xs hidden-sm"> <div class="bg-secondary d-flex"> <a href="/semantic-search/4.2/index.html" class="brand" title="Semantic Search 4.2"> <img src="/semantic-search/4.2/_static/platform-logo.svg" alt="Ontotext Platform logo" height="44" class="logo"> <span>4.2</span> </a> <a class="ml-auto btn btn-primary hidden-lg-up d-flex" data-toggle="collapse" href="#collapseSideNav" aria-expanded="false" aria-controls="collapseExample"> <span class="icon-hbars align-self-center"></span> </a> </div> <div id="collapseSideNav" class="hidden-mobile-nav"> <div class="p-3"> <form action="/semantic-search/4.2/search.html" method="get"> <div class="input-group input-group-sm"> <span class="input-group-addon icon"><span class="icon-search icon-lg text-muted"></span></span> <input type="text" name="q" class="form-control" placeholder="Search the documentation..."> <input type="hidden" name="check_keywords" value="yes"> <input type="hidden" name="area" value="default"> </div> </form> <div class="mt-3"> <div class="dropdown d-inline-block"> <button class="btn btn-link dropdown-toggle p-0" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Semantic Search </button> <span class="dropdown-menu" aria-labelledby="dropdownMenuButton"> <script type="text/javascript"> var xmlHttp = new XMLHttpRequest(); xmlHttp.open( "GET", "https://platform.ontotext.com/services.txt", false ); xmlHttp.send( null ); var services = xmlHttp.responseText; var servicesSplit = services.split("\n"); for (var i = 0; i < servicesSplit.length; i++) { var serviceSplit = servicesSplit[i]; if (serviceSplit.length !== 0) { document.write('<a class="dropdown-item" href="/' + serviceSplit.split(",")[1] + '">' + serviceSplit.split(",")[0] + '</a>'); } } </script> </span> </div> </div> </div> <div class="sidebar-menu"> <ul class="current"> <li class="toctree-l1 current"><a class="current reference internal" href="#">Overview</a><ul> <li class="toctree-l2"><a class="reference internal" href="#data-indexing">Data Indexing</a></li> <li class="toctree-l2"><a class="reference internal" href="#graphql-api">GraphQL API</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="quick-start.html">Quick Start</a></li> <li class="toctree-l1"><a class="reference internal" href="monitoring.html">Monitoring</a></li> <li class="toctree-l1"><a class="reference internal" href="graphql-search-query-tutorial.html">Tutorial</a></li> <li class="toctree-l1"><a class="reference internal" href="administration.html">Administration</a></li> <li class="toctree-l1"><a class="reference internal" href="workbench.html">Workbench</a></li> <li class="toctree-l1"><a class="reference internal" href="soml.html">Semantic Object Modeling</a></li> <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> <li class="toctree-l1"><a class="reference internal" href="dependencies/index.html">Dependencies &amp; License</a></li> <li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release Notes</a></li> <li class="toctree-l1"><a class="reference internal" href="support.html">Support</a></li> </ul> </div> <hr class="m-0"> <div class="sidebar-menu"> <ul id="side-menu-accoridion" role="tablist" aria-multiselectable="true"> <li class="toctree-l1"> <a data-toggle="collapse" data-parent="#side-menu-accoridion" href="#collapse7" aria-expanded="false" aria-controls="collapse7"> Previous versions </a> <ul id="collapse7" class="collapse" role="tabpanel" aria-labelledby="heading7" aria-expanded="true"> <li><a class="menu-item-link" href="/semantic-search/4.2/">Search Service 4.2</a></li> <li><a class="menu-item-link" href="/semantic-search/4.1/">Search Service 4.1</a></li> <li><a class="menu-item-link" href="/semantic-search/4.0/">Search Service 4.0</a></li> <li><a class="menu-item-link" href="/semantic-search/3.8/">Search Service 3.8</a></li> <li><a class="menu-item-link" href="/3.7/">Ontotext Platform 3.7</a></li> <li><a class="menu-item-link" href="/3.6/">Ontotext Platform 3.6</a></li> <li><a class="menu-item-link" href="/3.5/">Ontotext Platform 3.5</a></li> <li><a class="menu-item-link" href="/3.4/">Ontotext Platform 3.4</a></li> <li><a class="menu-item-link" href="/3.3/">Ontotext Platform 3.3</a></li> <li><a class="menu-item-link" href="/3.2/">Ontotext Platform 3.2</a></li> <li><a class="menu-item-link" href="/3.1/">Ontotext Platform 3.1</a></li> <li><a class="menu-item-link" href="/3.0/">Ontotext Platform 3.0</a></li> </ul> </li> </ul> </div></div> </div> </div> <div class="main-container pb-5"> <div class="container-fluid"> <div class="section" id="overview"> <h1>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">露</a></h1> <div class="contents local topic" id="what-s-in-this-document"> <p class="topic-title"><cite>What鈥檚 in this document?</cite></p> <ul class="simple"> <li><a class="reference internal" href="#data-indexing" id="id1">Data Indexing</a></li> <li><a class="reference internal" href="#graphql-api" id="id2">GraphQL API</a></li> </ul> </div> <p>The Semantic Search provides a way to index the data from <a class="reference external" href="https://graphdb.ontotext.com/documentation/enterprise/index.html">GraphDB</a> in Elasticsearch and run queries against it. On SOML bind action, the Semantic Search Service will create <a class="reference external" href="https://graphdb.ontotext.com/documentation/enterprise/elasticsearch-graphdb-connector.html">Elasticsearch Connector</a> instances in GraphDB. These Connectors will ensure that the data from GraphDB is always indexed and up-to-date in Elasticsearch.</p> <p>The Semantic Search is a dependent component of the <a class="reference external" href="https://platform.ontotext.com/semantic-objects/index.html">Ontotext Semantic Objects</a>. This is why you need to have Semantic Objects running in order to use it.</p> <p>The Semantic Search provides a GraphQL endpoint over the data in Elasticsearch, allowing easy data consuming. To make a SOML schema searchable via the Semantic Search, the SOML schema should be first uploaded and bound in the Semantic Objects. After that, the schema should be simply bound to the Semantic Search, which will read it from the shared SOML storage. The Semantic Search will make sure to create the necessary connectors and indexes in GraphDB and Elasticsearch.</p> <p>See the <a class="reference internal" href="soml.html"><span class="doc">SOML Search documentation</span></a> for information on how to configure a SOML schema for the Semantic Search.</p> <div class="section" id="data-indexing"> <span id="semantic-search-data-indexing"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Data Indexing</a><a class="headerlink" href="#data-indexing" title="Permalink to this headline">露</a></h2> <p>During data indexing, the following happens:</p> <ol class="arabic simple"> <li>The Semantic Search stops any already running indexing job by the application. It does not affect externally managed connectors and indexes.</li> <li>The Semantic Search compares the configurations of the existing connectors with the new configurations.</li> <li>The Semantic Search schedules reindexing of connectors with modified configurations.</li> <li>The Semantic Search drops existing GraphDB Elasticsearch Connectors and recreates them one by one.</li> <li>GraphDB performs the indexing to Elasticsearch.</li> </ol> <p>The data indexing process is triggered when:</p> <ul class="simple"> <li>A new SOML schema is bound. Calling a <code class="docutils literal notranslate"><span class="pre">bind</span></code> action on an already bound SOML schema will also trigger a data indexing process.</li> <li>The already bound SOML schema is updated.</li> <li>Changes are made to the index create settings (<code class="docutils literal notranslate"><span class="pre">elasticsearch.indexCreateSettings</span></code>) or connector create settings (<code class="docutils literal notranslate"><span class="pre">elasticsearch.connectorCreateSettings</span></code>) and restarting the Semantic Search.</li> </ul> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">Update on the bound schema will trigger a data indexing only if changes to the indexed types and/or properties, as well as the create settings, are detected.</p> </div> <p>The Semantic Search will trigger deletion of the Elasticsearch GraphDB Connectors, resulting in deletion of the Elasticsearch indexes when:</p> <ul class="simple"> <li>A SOML schema is unbound from the Semantic Search by calling an HTTP DELETE request to the <code class="docutils literal notranslate"><span class="pre">/soml/{id}/search</span></code> endpoint.</li> <li>A SOML schema is unbound from the Semantic Search by performing a <code class="docutils literal notranslate"><span class="pre">bind</span></code> action on another schema.</li> <li>A SOML schema is deleted.</li> </ul> <p>The actions above will remove all <code class="docutils literal notranslate"><span class="pre">otp-*</span></code> GraphDB Connector instances and Elasticsearch indexes. The rest will not be affected.</p> <p>It should also be noted that setting <code class="docutils literal notranslate"><span class="pre">elasticsearch.indexingEnabled</span></code> to <code class="docutils literal notranslate"><span class="pre">false</span></code> will not trigger deletion of the indexes. So if you have big indexes and plan many SOML updates that can affect the index structure, a possible solution to avoid rebuilding the Elasticsearch indexes in each update is to disable the Elasticsearch indexing in the Semantic Search. GraphDB will continue updating the existing Elasticsearch indexes so the data would be up-to-date. Upon reactivation, the affected indexes will be updated.</p> <p>However, any changes in the SOML model would not be applied. Long-term, this is not advisable as the Semantic Search may start using a data model that does not correspond to the indexed data, and this may result in various unexpected problems.</p> </div> <div class="section" id="graphql-api"> <span id="semantic-search-graphql-api"></span><h2><a class="toc-backref" href="#what-s-in-this-document">GraphQL API</a><a class="headerlink" href="#graphql-api" title="Permalink to this headline">露</a></h2> <p>The primary API of the Semantic Search is the <code class="docutils literal notranslate"><span class="pre">/graphql</span></code> REST endpoint. It exposes a GraphQL schema based on the searchable shapes and properties of a bound SOML schema.</p> <p>The GraphQL schema is tailored to be as close as possible to the Elasticsearch DSL, including queries, sorting, and aggregations.</p> <p>The <code class="docutils literal notranslate"><span class="pre">/graphql</span></code> endpoint is available for both GET and POST method requests.</p> <p>GET request example for query <code class="docutils literal notranslate"><span class="pre">query</span> <span class="pre">all_humans</span> <span class="pre">{</span> <span class="pre">human_search</span> <span class="pre">{</span> <span class="pre">hits</span> <span class="pre">{</span> <span class="pre">human</span> <span class="pre">{</span> <span class="pre">id</span> <span class="pre">}</span> <span class="pre">}</span> <span class="pre">}</span> <span class="pre">}</span></code>:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>curl --location -X GET <span class="se">\</span> -H <span class="s1">&#39;Content-Type: application/graphql&#39;</span> <span class="se">\</span> <span class="s1">&#39;http://localhost:9980/graphql?query=query%20all_humans%20%7B%20human_search%20%7B%20hits%20%7B%20human%20%7B%20id%20%7D%20%7D%20%7D%20%7D&#39;</span> </pre></div> </div> <p>POST request example for raw query <code class="docutils literal notranslate"><span class="pre">query</span> <span class="pre">all_humans</span> <span class="pre">{</span> <span class="pre">human_search</span> <span class="pre">{</span> <span class="pre">hits</span> <span class="pre">{</span> <span class="pre">human</span> <span class="pre">{</span> <span class="pre">id</span> <span class="pre">}</span> <span class="pre">}</span> <span class="pre">}</span> <span class="pre">}</span></code>:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>curl --location -X POST <span class="se">\</span> -H <span class="s1">&#39;Content-Type: application/graphql&#39;</span> <span class="se">\</span> --data <span class="s1">&#39;query all_humans { human_search { hits { human { id } } } }&#39;</span> <span class="se">\</span> <span class="s1">&#39;http://localhost:9980/graphql&#39;</span> </pre></div> </div> <p>POST request example for query <code class="docutils literal notranslate"><span class="pre">query</span> <span class="pre">all_humans</span> <span class="pre">{</span> <span class="pre">human_search</span> <span class="pre">{</span> <span class="pre">hits</span> <span class="pre">{</span> <span class="pre">human</span> <span class="pre">{</span> <span class="pre">id</span> <span class="pre">}</span> <span class="pre">}</span> <span class="pre">}</span> <span class="pre">}</span></code> as JSON payload:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>curl --location -X POST <span class="se">\</span> -H <span class="s1">&#39;Content-Type: application/json&#39;</span> <span class="se">\</span> --data <span class="s1">&#39;{&quot;operationName&quot;: &quot;all_humans&quot;, &quot;query&quot;: &quot;query all_humans { human_search { hits { human { id } } } }&quot;}&#39;</span> <span class="se">\</span> <span class="s1">&#39;http://localhost:9980/graphql&#39;</span> </pre></div> </div> </div> </div> </div> </div> <hr class="m-0"> <footer class="main-container py-5"> <div class="container-fluid"> <div class="row"> <div class="col-12 col-sm-6 col-lg-4"> <!-- <h4>We are on Stack Overflow</h4> <div class="mb-5 media"> <img src="_static/so-icon.svg" alt="stackoverflow logo" width="44" class="d-flex mr-3"> <div class="media-body"> Get quick answers on technical questions from the community as well as Ontotext experts using the <a href="https://stackoverflow.com/questions/tagged/semobjects" onclick="__gaTracker('send', 'event', 'outbound-widget', 'https://stackoverflow.com/questions/tagged/semobjects', 'footer');" target="_blank">semobjects</a> tag </div> </div> --> <h4>Download documentation</h4> <ul class="list-inline"> <li class="list-inline-item"> <a href="/semantic-search/4.2/pdf/Semantic-Search.pdf" download class="btn btn-link text-secondary px-0" target="_blank"><span class="icon-download text-tertiary"></span> PDF</a> </li> <li class="list-inline-item"> <a href="/semantic-search/4.2/epub/Semantic-Search.epub" download class="btn btn-link text-secondary px-0" target="_blank"><span class="icon-download text-tertiary"></span> ePUB</a> </li> </ul> </div> <div class="col-12 col-sm-6 col-lg-4"> <h4>Contacts</h4> <ul class="list-unstyled mb-4"> <li class="m-0"> <a href="mailto:platform-support@ontotext.com" class="btn btn-link text-secondary px-0" target="_blank"> <span class="icon-email text-tertiary"></span> <b>Support</b> <span class="hidden-lg-down">路 platform-support@ontotext.com</span> </a> </li> <li class="m-0"> <a href="mailto:sales@ontotext.com" class="btn btn-link text-secondary px-0" target="_blank"> <span class="icon-email text-tertiary"></span> <b>Sales</b> <span class="hidden-lg-down">路 sales@ontotext.com</span> </a> </li> <li class="m-0 mb-3"> <a href="mailto:info@ontotext.com" class="btn btn-link text-secondary px-0" target="_blank"> <span class="icon-email text-tertiary"></span> <b>General</b> <span class="hidden-lg-down">路 info@ontotext.com</span> </a> </li> <li class="m-0"><span href="mailto:info@ontotext.com" class="btn btn-link text-secondary px-0"><span class="icon-phone text-tertiary"></span> <b>US (toll free)</b> 路 1-866-972-6686</span></li> <li class="m-0"><span href="mailto:info@ontotext.com" class="btn btn-link text-secondary px-0"><span class="icon-phone text-tertiary"></span> <b>Europe</b> 路 +359 2 974 61 60</span></li> </ul> </div> <div class="col-12 col-sm-6 col-lg-4 mb-4"> <h4>More info</h4> <ul class="list-unstyled mb-4"> <li class="m-0"><a href="http://www.ontotext.com/company/" class="btn btn-link text-secondary px-0" target="_blank"><span class="icon-external text-tertiary"></span> About Ontotext</a></li> <li class="m-0"><a href="https://www.w3.org/standards/semanticweb/" class="btn btn-link text-secondary px-0" target="_blank"><span class="icon-external text-tertiary"></span> Semantic web</a></li> </ul> <h4>Follow us</h4> <div class="mb-4"> <a data-toggle="tooltip" title="" href="https://www.linkedin.com/company/ontotext-ad" class="btn btn-link px-0" target="_blank" data-original-title="LinkedIn"><span class="icon-linkedin icon-lg text-linkedin"></span></a> <a data-toggle="tooltip" title="" href="https://twitter.com/ontotext" class="btn btn-link px-0" target="_blank" data-original-title="Twitter"><span class="icon-twitter icon-lg text-twitter"></span></a> <a data-toggle="tooltip" title="" href="https://www.facebook.com/Ontotext" class="btn btn-link px-0" target="_blank" data-original-title="Facebook"><span class="icon-facebook icon-lg text-facebook"></span></a> <a data-toggle="tooltip" title="" href="https://www.youtube.com/ontotext" class="btn btn-link px-0" target="_blank" data-original-title="Youtube"><span class="icon-youtube icon-lg text-youtube"></span></a> <!-- <a data-toggle="tooltip" title="" href="https://plus.google.com/+Ontotext" class="btn btn-link px-0" target="_blank" data-original-title="Google+"><span class="icon-google-plus icon-lg text-google"></span></a> --> </div> </div> </div> <!-- <p class="pull-right"> </p> --> <div class="text-muted small d-flex align-items-center"> <div> <a href="http://ontotext.com/" target="_blank" class="d-inline-block mb-3 mb-md-0 mr-2"><img src="../_static/ot-logo.svg" class="m-0" height="26" alt="Ontotext logo"></a> <br class="hidden-md-up"> &copy; Copyright 2023, Ontotext. Last updated on 15 December, 2023. | <a href="https://ontotext.com/privacy-policy-2/">Privacy</a> </div> <div class="ml-auto"> <button id="scrollToTop" class="btn btn-link" data-toggle="tooltip" data-placement="top" title="" data-original-title="Back to top"><span class="icon-arrow-up icon-2x"></span></button> </div> </div> </div> </footer> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10