CINXE.COM

Configuration — Metadata Studio 3.11.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>Configuration &#8212; Metadata Studio 3.11.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> <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Usage" href="usage.html" /> <link rel="prev" title="Installation" href="installation.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="/omds/3.11/_static/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="/omds/3.11/_static/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/omds/3.11/_static/favicon-16x16.png"> <link rel="manifest" type="application/manifest+json" href="/omds/3.11/_static/site.webmanifest"> <script src="/omds/3.11/_static/js/jquery-1.12.4.min.js"></script> <script src="/omds/3.11/_static/js/jquery-fix.js"></script> <script src="/omds/3.11/_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 20 April 2022 token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IkhYajdRQndWRzVPVERuMjlobWJsUDZLVHVKLTZZdnpUIn0.eyJhdWQiOiI2NzJjYTdiMy1jMzcyLTRkZjMtODJkOC05YTFhMGQ3ZDY4YzEiLCJleHAiOjE2NTA4NjAwNjAsImlhdCI6MTU4Nzc0NjE1NiwiaXNzIjoic3dhcGktcGxhdGZvcm0ub250b3RleHQuY29tIiwic3ViIjoiMDNhNDlkZjQtMGQwOS00NmNmLWFhNWUtNjVhNzNiNmYxN2ZmIiwiYXV0aGVudGljYXRpb25UeXBlIjoiUEFTU1dPUkQiLCJlbWFpbCI6InJlYWRvbmx5dXNlckBleGFtcGxlLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJSZWFkT25seVVzZXIiLCJhcHBsaWNhdGlvbklkIjoiNjcyY2E3YjMtYzM3Mi00ZGYzLTgyZDgtOWExYTBkN2Q2OGMxIiwicm9sZXMiOlsiUmVhZE9ubHkiXX0.iZiHf-vgNddiNOCBXT6cdYDOnpR_fk1EQn6UICBTETY" } 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="/omds/3.11/index.html" class="brand" title="Metadata Studio 3.11"> <img src="/omds/3.11/_static/metadata-studio.png" alt="Metadata Studio logo" height="44" class="logo"> <span>3.11</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="/omds/3.11/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"> Metadata Studio </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"><a class="reference internal" href="index.html">General</a></li> <li class="toctree-l1"><a class="reference internal" href="architecture-and-components.html">Architecture &amp; Components</a></li> <li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Configuration</a><ul> <li class="toctree-l2"><a class="reference internal" href="#introduction">Introduction</a></li> <li class="toctree-l2"><a class="reference internal" href="#classes-model">Classes Model</a><ul> <li class="toctree-l3"><a class="reference internal" href="#rdf-model">RDF model</a></li> <li class="toctree-l3"><a class="reference internal" href="#custom-document-classes">Custom document classes</a></li> <li class="toctree-l3"><a class="reference internal" href="#custom-annotation-classes">Custom annotation classes</a></li> <li class="toctree-l3"><a class="reference internal" href="#custom-concept-classes">Custom concept classes</a></li> <li class="toctree-l3"><a class="reference internal" href="#custom-form-classes">Custom form classes</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#creating-objects">Creating Objects</a><ul> <li class="toctree-l3"><a class="reference internal" href="#creating-projects">Creating projects</a></li> <li class="toctree-l3"><a class="reference internal" href="#creating-corpora">Creating corpora</a></li> <li class="toctree-l3"><a class="reference internal" href="#creating-documents">Creating documents</a></li> <li class="toctree-l3"><a class="reference internal" href="#creating-annotations">Creating annotations</a></li> <li class="toctree-l3"><a class="reference internal" href="#creating-forms">Creating forms</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#validating-objects">Validating Objects</a><ul> <li class="toctree-l3"><a class="reference internal" href="#validating-annotation-fields">Validating Annotation fields</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#conditional-objects">Conditional Objects</a><ul> <li class="toctree-l3"><a class="reference internal" href="#conditional-form-fields">Conditional Form fields</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#users">Users</a></li> <li class="toctree-l2"><a class="reference internal" href="#creating-annotation-services">Creating Annotation Services</a><ul> <li class="toctree-l3"><a class="reference internal" href="#registration-query">Registration query</a></li> <li class="toctree-l3"><a class="reference internal" href="#annotation-query">Annotation query</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="#creating-external-services">Creating External Services</a><ul> <li class="toctree-l3"><a class="reference internal" href="#wikidata-external-service">Wikidata external service</a></li> <li class="toctree-l3"><a class="reference internal" href="#now-external-service">NOW external service</a></li> </ul> </li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</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="migration-guide.html">Migration Guide</a></li> <li class="toctree-l1"><a class="reference internal" href="dependencies-and-license.html">Dependencies &amp; License</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="/3.0/">Metadata Studio 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="configuration"> <h1>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline">¶</a></h1> <div class="contents local topic" id="what-s-in-this-document"> <p class="topic-title"><cite>What’s in this document?</cite></p> <ul class="simple"> <li><a class="reference internal" href="#introduction" id="id1">Introduction</a></li> <li><a class="reference internal" href="#classes-model" id="id2">Classes Model</a><ul> <li><a class="reference internal" href="#rdf-model" id="id3">RDF model</a><ul> <li><a class="reference internal" href="#objects-and-predicates" id="id4">Objects and predicates</a></li> </ul> </li> <li><a class="reference internal" href="#custom-document-classes" id="id5">Custom document classes</a></li> <li><a class="reference internal" href="#custom-annotation-classes" id="id6">Custom annotation classes</a><ul> <li><a class="reference internal" href="#documentannotation-classes" id="id7">DocumentAnnotation classes</a></li> <li><a class="reference internal" href="#inlineannotation-classes" id="id8">InlineAnnotation classes</a></li> </ul> </li> <li><a class="reference internal" href="#custom-concept-classes" id="id9">Custom concept classes</a></li> <li><a class="reference internal" href="#custom-form-classes" id="id10">Custom form classes</a></li> </ul> </li> <li><a class="reference internal" href="#creating-objects" id="id11">Creating Objects</a><ul> <li><a class="reference internal" href="#creating-projects" id="id12">Creating projects</a></li> <li><a class="reference internal" href="#creating-corpora" id="id13">Creating corpora</a></li> <li><a class="reference internal" href="#creating-documents" id="id14">Creating documents</a></li> <li><a class="reference internal" href="#creating-annotations" id="id15">Creating annotations</a><ul> <li><a class="reference internal" href="#applying-human-validation-workflow-to-annotations" id="id16">Applying Human Validation workflow to annotations</a></li> </ul> </li> <li><a class="reference internal" href="#creating-forms" id="id17">Creating forms</a></li> </ul> </li> <li><a class="reference internal" href="#validating-objects" id="id18">Validating Objects</a><ul> <li><a class="reference internal" href="#validating-annotation-fields" id="id19">Validating Annotation fields</a></li> </ul> </li> <li><a class="reference internal" href="#conditional-objects" id="id20">Conditional Objects</a><ul> <li><a class="reference internal" href="#conditional-form-fields" id="id21">Conditional Form fields</a></li> </ul> </li> <li><a class="reference internal" href="#users" id="id22">Users</a></li> <li><a class="reference internal" href="#creating-annotation-services" id="id23">Creating Annotation Services</a><ul> <li><a class="reference internal" href="#registration-query" id="id24">Registration query</a></li> <li><a class="reference internal" href="#annotation-query" id="id25">Annotation query</a></li> </ul> </li> <li><a class="reference internal" href="#creating-external-services" id="id26">Creating External Services</a><ul> <li><a class="reference internal" href="#wikidata-external-service" id="id27">Wikidata external service</a></li> <li><a class="reference internal" href="#now-external-service" id="id28">NOW external service</a></li> </ul> </li> </ul> </div> <p>The following section describes how Metadata Studio can be configured with custom data and schema for a particular use case. It is to be used by users who integrate Metadata Studio in their specific projects and environments.</p> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">This documentation does not attempt to describe deployment specifics. See <a class="reference internal" href="installation.html"><span class="doc">here</span></a> for deployment instructions.</p> </div> <div class="section" id="introduction"> <span id="configuration-introduction"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Introduction</a><a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h2> <p>As described in more detail in the application’s <a class="reference internal" href="architecture-and-components.html#architecture-and-components-data-model"><span class="std std-ref">data model</span></a>, the main objects in the Metadata Studio are:</p> <ul class="simple"> <li>Users</li> <li>Projects</li> <li>Corpora</li> <li>Documents</li> <li>Annotations</li> <li>Concepts</li> <li>SavedReports</li> <li>Annotation Services</li> </ul> <p>Metadata Studio configurations are kept in GraphDB. The configuration is split into two segments:</p> <ul class="simple"> <li>The model of the configuration data #classes-model - defines the classes with which Metadata Studio works. It is described as a SOML schema.</li> <li>The concrete objects in a Metadata Studio installation - based on the defined schema model, objects can be created either through RDF or by applying runtime create objects mutations.</li> </ul> <p>By default, no Annotation services are configured, so if you want to use third-party text mining API services, you would need to <a class="reference internal" href="#configuration-annotation-service-creation"><span class="std std-ref">configure them</span></a> as well.</p> <p>The following is a configuration example of a schema request body customized for our <a class="reference external" href="https://github.com/diffbot/knowledge-net">Knowledge Net</a> use case, which defines a specific simple document class and a Person inline annotation class that links to Wikidata people concepts. It comprises two segments:</p> <ul id="configuration-default-schema"> <li><p class="first">the <strong>default SOML schema</strong></p> <blockquote> <div><div class="admonition important"> <p class="first admonition-title">Important</p> <p class="last">This part of the schema is identical for all Metadata Studio projects. It is not recommended to modify it in any way.</p> </div> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">id</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">/soml/knowledge-net</span> <span class="nt">label</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">MANT vocabulary</span> <span class="nt">created</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">2021-08-13</span> <span class="nt">versionInfo</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1.0</span> <span class="nt">config</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">lang</span><span class="p">:</span> <span class="s">&quot;ALL:en,NONE&quot;</span><span class="p p-Indicator">,</span><span class="nt"> implicit</span><span class="p">:</span> <span class="s">&quot;en&quot;</span><span class="p p-Indicator">,</span><span class="nt"> enable_mutations</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> disabledChecks</span><span class="p">:</span> <span class="s">&quot;rangeCheck&quot;</span><span class="p p-Indicator">,</span><span class="nt"> exposeSomlInGraphQL</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}</span> <span class="nt">prefixes</span><span class="p">:</span> <span class="c1"># common prefixes</span> <span class="nt">so</span><span class="p">:</span> <span class="s">&quot;http://www.ontotext.com/semantic-object/&quot;</span> <span class="nt">dct</span><span class="p">:</span> <span class="s">&quot;http://purl.org/dc/terms/&quot;</span> <span class="nt">gn</span><span class="p">:</span> <span class="s">&quot;http://www.geonames.org/ontology#&quot;</span> <span class="nt">owl</span><span class="p">:</span> <span class="s">&quot;http://www.w3.org/2002/07/owl#&quot;</span> <span class="nt">puml</span><span class="p">:</span> <span class="s">&quot;http://plantuml.com/ontology#&quot;</span> <span class="nt">rdf</span><span class="p">:</span> <span class="s">&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;</span> <span class="nt">rdfs</span><span class="p">:</span> <span class="s">&quot;http://www.w3.org/2000/01/rdf-schema#&quot;</span> <span class="nt">skos</span><span class="p">:</span> <span class="s">&quot;http://www.w3.org/2004/02/skos/core#&quot;</span> <span class="nt">void</span><span class="p">:</span> <span class="s">&quot;http://rdfs.org/ns/void#&quot;</span> <span class="nt">wgs84</span><span class="p">:</span> <span class="s">&quot;http://www.w3.org/2003/01/geo/wgs84_pos#&quot;</span> <span class="nt">xsd</span><span class="p">:</span> <span class="s">&quot;http://www.w3.org/2001/XMLSchema#&quot;</span> <span class="nt">sys</span><span class="p">:</span> <span class="s">&quot;http://ontotext.com/soml/&quot;</span> <span class="nt">omds</span><span class="p">:</span> <span class="s">&quot;http://www.ontotext.com/metadatastudio#&quot;</span> <span class="nt">usr</span><span class="p">:</span> <span class="s">&quot;http://www.ontotext.com/metadatastudio/user/&quot;</span> <span class="nt">rev-status</span><span class="p">:</span> <span class="s">&quot;http://www.ontotext.com/metadatastudio/review-status/&quot;</span> <span class="nt">wd</span><span class="p">:</span> <span class="s">&quot;http://www.wikidata.org/entity/&quot;</span> <span class="nt">wdt</span><span class="p">:</span> <span class="s">&quot;http://www.wikidata.org/prop/direct/&quot;</span> <span class="nt">inst</span><span class="p">:</span> <span class="s">&quot;http://www.ontotext.com/connectors/elasticsearch/instance#&quot;</span> <span class="nt">elastic</span><span class="p">:</span> <span class="s">&quot;http://www.ontotext.com/connectors/elasticsearch#&quot;</span> <span class="nt">specialPrefixes</span><span class="p">:</span> <span class="nt">vocab_prefix</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">voc</span> <span class="nt">base_iri</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://knowledge.net/</span> <span class="nt">vocab_iri</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://knowledge.net/</span> <span class="nt">properties</span><span class="p">:</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Metadata</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">metadata</span><span class="p p-Indicator">}</span> <span class="nt">updateable</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">boolean</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">updateable</span><span class="p p-Indicator">}</span> <span class="nt">label</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="nv">rdfs</span><span class="p p-Indicator">:</span><span class="nv">label</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}</span> <span class="nt">status</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">status</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;The</span><span class="nv"> </span><span class="s">object</span><span class="nv"> </span><span class="s">status,</span><span class="nv"> </span><span class="s">like</span><span class="nv"> </span><span class="s">ACTIVE</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">ARCHIVED</span><span class="nv"> </span><span class="s">etc.&quot;</span><span class="p p-Indicator">}</span> <span class="nt">types</span><span class="p">:</span> <span class="nt">reviewStatus</span><span class="p">:</span> <span class="nt">values</span><span class="p">:</span> <span class="p p-Indicator">-</span> <span class="p p-Indicator">{</span><span class="nt">name</span><span class="p">:</span> <span class="nv">REJECTED</span><span class="p p-Indicator">,</span><span class="nt"> value</span><span class="p">:</span> <span class="nv">rev-status</span><span class="p p-Indicator">:</span><span class="nv">Rejected</span><span class="p p-Indicator">,</span><span class="nt"> label</span><span class="p">:</span> <span class="s">&quot;Rejected&quot;</span><span class="p p-Indicator">}</span> <span class="nt">objects</span><span class="p">:</span> <span class="c1">### SOML Extension ###</span> <span class="l l-Scalar l-Scalar-Plain">sys:SomlExtension</span><span class="p p-Indicator">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Base</span><span class="nv"> </span><span class="s">class</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">Extension</span><span class="nv"> </span><span class="s">classes&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:somlId</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;ID</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">which</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">Object</span><span class="nv"> </span><span class="s">is</span><span class="nv"> </span><span class="s">created&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:SpecialPrefixes</span><span class="p p-Indicator">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:SomlExtension</span> <span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Special</span><span class="nv"> </span><span class="s">prefixes</span><span class="nv"> </span><span class="s">(namespaces)&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:baseIri</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Base</span><span class="nv"> </span><span class="s">IRI</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">data</span><span class="nv"> </span><span class="s">(resources),</span><span class="nv"> </span><span class="s">used</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">characteristics</span><span class="nv"> </span><span class="s">such</span><span class="nv"> </span><span class="s">as</span><span class="nv"> </span><span class="s">type</span><span class="nv"> </span><span class="s">and</span><span class="nv"> </span><span class="s">prefix&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:vocabIri</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Default</span><span class="nv"> </span><span class="s">namespace</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">vocabulary</span><span class="nv"> </span><span class="s">(ontology)</span><span class="nv"> </span><span class="s">terms,</span><span class="nv"> </span><span class="s">i.e.</span><span class="nv"> </span><span class="s">object</span><span class="nv"> </span><span class="s">and</span><span class="nv"> </span><span class="s">prop</span><span class="nv"> </span><span class="s">names&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:Prefix</span><span class="p p-Indicator">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:SomlExtension</span> <span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Known</span><span class="nv"> </span><span class="s">prefix</span><span class="nv"> </span><span class="s">(namespace)&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:id</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Namespace</span><span class="nv"> </span><span class="s">prefix&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:iri</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Namespace</span><span class="nv"> </span><span class="s">IRI&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:ObjectClass</span><span class="p p-Indicator">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:SomlExtension</span> <span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Base</span><span class="nv"> </span><span class="s">class</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">extending</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">with</span><span class="nv"> </span><span class="s">new</span><span class="nv"> </span><span class="s">Objects&quot;</span> <span class="nt">pattern</span><span class="p">:</span> <span class="s">&quot;${sys_id}&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:id</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;ID</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">Object</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">SOML&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:kind</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Abstract</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">not&quot;</span><span class="p p-Indicator">,</span><span class="nt"> valuesIn</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="s">&quot;abstract&quot;</span><span class="p p-Indicator">,</span> <span class="s">&quot;object&quot;</span><span class="p p-Indicator">]}</span> <span class="l l-Scalar l-Scalar-Plain">sys:inherits</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">iri</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Class</span><span class="nv"> </span><span class="s">to</span><span class="nv"> </span><span class="s">inherit</span><span class="nv"> </span><span class="s">from&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:label</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Label</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">Object</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">SOML&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:descr</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Description</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">clarification&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:type</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Array</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">type</span><span class="nv"> </span><span class="s">value</span><span class="nv"> </span><span class="s">IRIs</span><span class="nv"> </span><span class="s">(prefixed,</span><span class="nv"> </span><span class="s">relative,</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">absolute)&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:typeProp</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Property</span><span class="nv"> </span><span class="s">that</span><span class="nv"> </span><span class="s">determines</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">business</span><span class="nv"> </span><span class="s">type&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:sparqlFederatedService</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;The</span><span class="nv"> </span><span class="s">ID</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">a</span><span class="nv"> </span><span class="s">SPARQL</span><span class="nv"> </span><span class="s">Federation</span><span class="nv"> </span><span class="s">Service&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:meta</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">sys</span><span class="p p-Indicator">:</span><span class="nv">Meta</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Adds</span><span class="nv"> </span><span class="s">an</span><span class="nv"> </span><span class="s">additional</span><span class="nv"> </span><span class="s">meta</span><span class="nv"> </span><span class="s">directive</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">GraphQL</span><span class="nv"> </span><span class="s">schema</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">given</span><span class="nv"> </span><span class="s">property&quot;</span> <span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:props</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">sys</span><span class="p p-Indicator">:</span><span class="nv">Property</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Array</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">Properties</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">Object&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:Property</span><span class="p p-Indicator">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:SomlExtension</span> <span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Class</span><span class="nv"> </span><span class="s">representing</span><span class="nv"> </span><span class="s">a</span><span class="nv"> </span><span class="s">Property</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">Extension&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:id</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;ID</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">Property</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">SOML&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:label</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Label</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">Property</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">SOML&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:descr</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Description</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">clarification&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:rdfProp</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;RDF</span><span class="nv"> </span><span class="s">property</span><span class="nv"> </span><span class="s">name</span><span class="nv"> </span><span class="s">(if</span><span class="nv"> </span><span class="s">not</span><span class="nv"> </span><span class="s">allowed</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">GraphQL</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">hard</span><span class="nv"> </span><span class="s">to</span><span class="nv"> </span><span class="s">read)</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">SPARQL</span><span class="nv"> </span><span class="s">Template&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:range</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Datatype</span><span class="nv"> </span><span class="s">or</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">object</span><span class="nv"> </span><span class="s">type&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:min</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">int</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Minimum</span><span class="nv"> </span><span class="s">number</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">values,</span><span class="nv"> </span><span class="s">integer</span><span class="nv"> </span><span class="s">(mutations)&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:max</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Maximum</span><span class="nv"> </span><span class="s">number</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">values,</span><span class="nv"> </span><span class="s">integer.</span><span class="nv"> </span><span class="s">inf</span><span class="nv"> </span><span class="s">means</span><span class="nv"> </span><span class="s">unlimited</span><span class="nv"> </span><span class="s">(mutations)&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:restrictive</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">boolean</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Controls</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">SPARQL</span><span class="nv"> </span><span class="s">generation.</span><span class="nv"> </span><span class="s">Properties</span><span class="nv"> </span><span class="s">set</span><span class="nv"> </span><span class="s">as</span><span class="nv"> </span><span class="s">true</span><span class="nv"> </span><span class="s">would</span><span class="nv"> </span><span class="s">not</span><span class="nv"> </span><span class="s">generate</span><span class="nv"> </span><span class="s">OPTIONAL&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:meta</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">sys</span><span class="p p-Indicator">:</span><span class="nv">Meta</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Adds</span><span class="nv"> </span><span class="s">an</span><span class="nv"> </span><span class="s">additional</span><span class="nv"> </span><span class="s">meta</span><span class="nv"> </span><span class="s">directive</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">GraphQL</span><span class="nv"> </span><span class="s">schema</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">given</span><span class="nv"> </span><span class="s">property&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:Meta</span><span class="p p-Indicator">:</span> <span class="nt">descr</span><span class="p">:</span> <span class="s">&quot;Metadata</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">a</span><span class="nv"> </span><span class="s">given</span><span class="nv"> </span><span class="s">SOML</span><span class="nv"> </span><span class="s">Object/Property&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">sys:key</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Key</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">data&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">sys:values</span><span class="p p-Indicator">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> descr</span><span class="p">:</span> <span class="s">&quot;Value</span><span class="nv"> </span><span class="s">of</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">data&quot;</span><span class="p p-Indicator">}</span> <span class="c1">### Metadata Studio System ###</span> <span class="nt">Object</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">id</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;ID&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">iri</span> <span class="nt">min</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">}}</span> <span class="nt">type</span><span class="p">:</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">iri</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">inf</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">NamedEntity</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">id</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="nt">annotationContext</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">inverseAlias</span><span class="p">:</span> <span class="nv">createdBy</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">Annotation</span><span class="p p-Indicator">,</span><span class="nt"> rangeCheck</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}</span> <span class="nt">User</span><span class="p">:</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:User</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">NamedEntity</span> <span class="nt">pattern</span><span class="p">:</span> <span class="s">&quot;usr:${username}&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="c1"># OMDS expects properties with names &#39;username&#39; where the user&#39;s username would go</span> <span class="c1"># and also a &#39;label&#39; where if configured the user display name will go</span> <span class="nt">label</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">readOnly</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}</span> <span class="nt">username</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">readOnly</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">username</span><span class="p p-Indicator">}</span> <span class="nt">fullName</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">readOnly</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">fullName</span><span class="p p-Indicator">}</span> <span class="nt">email</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">readOnly</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">email</span><span class="p p-Indicator">}</span> <span class="nt">avatar</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">avatar</span><span class="p p-Indicator">}</span> <span class="nt">settings</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">settings</span><span class="p p-Indicator">}</span> <span class="nt">Timesensitive</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">createdAt</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Created</span><span class="nv"> </span><span class="s">at&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dateTime</span> <span class="nt">min</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:createdAt</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">5</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">5</span><span class="p p-Indicator">}}</span> <span class="nt">createdBy</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Created</span><span class="nv"> </span><span class="s">by&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">NamedEntity</span> <span class="nt">min</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:createdBy</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">6</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">6</span><span class="p p-Indicator">}}</span> <span class="nt">modifiedAt</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Modified</span><span class="nv"> </span><span class="s">at&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dateTime</span> <span class="nt">min</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">0</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:modifiedAt</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">7</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">7</span><span class="p p-Indicator">}}</span> <span class="nt">modifiedBy</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Modified</span><span class="nv"> </span><span class="s">by&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">NamedEntity</span> <span class="nt">min</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">0</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:modifiedBy</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">8</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">8</span><span class="p p-Indicator">}}</span> <span class="nt">SavedReport</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Timesensitive</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:SavedReport</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">corpusId</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="nt">reportType</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;The</span><span class="nv"> </span><span class="s">report</span><span class="nv"> </span><span class="s">type&quot;</span> <span class="nt">data</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Holds</span><span class="nv"> </span><span class="s">report</span><span class="nv"> </span><span class="s">generated</span><span class="nv"> </span><span class="s">data</span><span class="nv"> </span><span class="s">as</span><span class="nv"> </span><span class="s">serialized</span><span class="nv"> </span><span class="s">JSON&quot;</span> <span class="nt">config</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Holds</span><span class="nv"> </span><span class="s">configuration</span><span class="nv"> </span><span class="s">used</span><span class="nv"> </span><span class="s">during</span><span class="nv"> </span><span class="s">report</span><span class="nv"> </span><span class="s">generation&quot;</span> <span class="nt">Project</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Timesensitive</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:Project</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Label&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">status</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Status&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">corpus</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Corpus</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">corpus</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">logo</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">iri</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">logo</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">Corpus</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Timesensitive</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:Corpus</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Label&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">status</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Status&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">allowedUsers</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">allowedUsers</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">document</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Document</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">document</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">documentCount</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Documents</span><span class="nv"> </span><span class="s">count&quot;</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">10</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">int</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">select ?_subject (count(?documentId) as ?_value) where {</span> <span class="no">?_subject omds:document ?documentId.</span> <span class="no">} group by ?_subject VALUES ?_subject {}</span> <span class="nt">project</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Project</span><span class="p p-Indicator">,</span><span class="nt"> inverseAlias</span><span class="p">:</span> <span class="nv">corpus</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">Document</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Timesensitive</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Label&quot;</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">stringOrLangString</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">text</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Text&quot;</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">text</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">annotations</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Annotation</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">annotations</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">annotationsCount</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Annotations</span><span class="nv"> </span><span class="s">count&quot;</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">10</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">int</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">select ?_subject (count(?annotationId) as ?_value) where {</span> <span class="no">?_subject omds:annotations ?annotationId.</span> <span class="no">} group by ?_subject</span> <span class="nt">annotationsModifiedAt</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Annotations</span><span class="nv"> </span><span class="s">modified</span><span class="nv"> </span><span class="s">at&quot;</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">11</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">dateTime</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">select ?_subject (?lastModified as ?_value)</span> <span class="no">where {</span> <span class="no">?_subject omds:annotations ?annotationId.</span> <span class="no">?annotationId omds:createdAt|omds:modifiedAt ?lastModified .</span> <span class="no">} order by DESC (?lastModified) limit 1 VALUES ?_subject { }</span> <span class="nt">corpus</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Corpus</span><span class="p p-Indicator">,</span><span class="nt"> inverseAlias</span><span class="p">:</span> <span class="nv">document</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">Metadata</span><span class="p">:</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:Metadata</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">field</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">field</span><span class="p p-Indicator">}</span> <span class="nt">values</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">values</span><span class="p p-Indicator">}</span> <span class="nt">AnnotationService</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">NamedEntity</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:AnnotationService</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="nt">serviceId</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}</span> <span class="nt">annotationQuery</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">annotationQuery</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}</span> <span class="nt">registrationQuery</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">registrationQuery</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">createdAt</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Created</span><span class="nv"> </span><span class="s">at&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">dateTime</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">createdAt</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">5</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">5</span><span class="p p-Indicator">}}}</span> <span class="nt">createdBy</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Created</span><span class="nv"> </span><span class="s">by&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">iri</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">createdBy</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">6</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">6</span><span class="p p-Indicator">}}}</span> <span class="nt">modifiedAt</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Modified</span><span class="nv"> </span><span class="s">at&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">dateTime</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">modifiedAt</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">7</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">7</span><span class="p p-Indicator">}}}</span> <span class="nt">modifiedBy</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Modified</span><span class="nv"> </span><span class="s">by&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">iri</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">modifiedBy</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">8</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">8</span><span class="p p-Indicator">}}}</span> <span class="nt">Concept</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">label</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Label&quot;</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">inf</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">stringOrLangString</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}}}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">preview</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">fields</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="s">&quot;label&quot;</span><span class="p p-Indicator">]},</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">Annotation</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Timesensitive</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">name</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Name&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">type</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">document</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Document</span><span class="p p-Indicator">,</span><span class="nt"> inverseAlias</span><span class="p">:</span> <span class="nv">annotations</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">reviewStatus</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Status&quot;</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">reviewStatus</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">reviewStatus</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">InlineAnnotation</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Annotation</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> preview</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> fields</span><span class="p">:</span> <span class="p p-Indicator">[</span> <span class="s">&quot;key&quot;</span> <span class="p p-Indicator">]</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="nt">annotationStart</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Annotation</span><span class="nv"> </span><span class="s">start&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">int</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">annotationStart</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span><span class="p p-Indicator">}}}</span> <span class="nt">annotationEnd</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Annotation</span><span class="nv"> </span><span class="s">end&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">int</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">annotationEnd</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">3</span><span class="p p-Indicator">}}}</span> <span class="nt">key</span><span class="p">:</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">inf</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">?_subject ^omds:annotations/omds:text ?text ;</span> <span class="no">omds:annotationStart ?start ;</span> <span class="no">omds:annotationEnd ?end .</span> <span class="no">bind (SUBSTR(?text, ?start + 1, ?end - ?start) as ?_value)</span> <span class="nt">snippet</span><span class="p">:</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">max</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">inf</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">?_subject ^omds:annotations/omds:text ?text ;</span> <span class="no">omds:annotationStart ?start ;</span> <span class="no">omds:annotationEnd ?end .</span> <span class="no">bind (&lt;http://www.ontotext.com/js#getSnippet&gt;(?text, ?start, ?end) as ?_value)</span> <span class="nt">DocumentAnnotation</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Annotation</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">preview</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">fields</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="s">&quot;id&quot;</span><span class="p p-Indicator">,</span> <span class="s">&quot;wikidata.label&quot;</span><span class="p p-Indicator">,</span> <span class="s">&quot;wikidata.id&quot;</span><span class="p p-Indicator">]},</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="p p-Indicator">}</span> <span class="nt">Form</span><span class="p">:</span> <span class="nt">kind</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">abstract</span> </pre></div> </div> </div></blockquote> </li> <li><p class="first"><strong>project-specific definitions</strong>: also a required part of the schema, but customized for the respective project</p> </li> </ul> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span> <span class="nt">SimpleDocument</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Document</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:Document</span> <span class="nt">Person</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Concept</span> <span class="nt">sparqlFederatedService</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">wikidata</span> <span class="nt">typeProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">generatedType</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">wd:Q5</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">generatedType</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="s">&quot;wdt:P31&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="nt">search</span><span class="p">:</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">restrictive</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">true</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">?_subject rdfs:label ?label. filter (regex(str(?label), {{query}}, \&quot;i\&quot;)).</span> <span class="nt">PersonAnnotation</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">InlineAnnotation</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://knowledge.net/Annotation/Person</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">wikidata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Person</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">preview</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">fields</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="s">&quot;wikidata.label&quot;</span><span class="p p-Indicator">]},</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}}</span> <span class="c1">### RBAC definitions ###</span> <span class="nt">rbac</span><span class="p">:</span> <span class="nt">roles</span><span class="p">:</span> <span class="nt">Default</span><span class="p">:</span> <span class="nt">description</span><span class="p">:</span> <span class="s">&quot;Everyone</span><span class="nv"> </span><span class="s">can</span><span class="nv"> </span><span class="s">read</span><span class="nv"> </span><span class="s">everything&quot;</span> <span class="nt">actions</span><span class="p">:</span> <span class="p p-Indicator">-</span> <span class="s">&quot;*/*/*&quot;</span> <span class="nt">Admin</span><span class="p">:</span> <span class="nt">description</span><span class="p">:</span> <span class="s">&quot;Administrator</span><span class="nv"> </span><span class="s">role,</span><span class="nv"> </span><span class="s">can</span><span class="nv"> </span><span class="s">read,</span><span class="nv"> </span><span class="s">write</span><span class="nv"> </span><span class="s">and</span><span class="nv"> </span><span class="s">delete</span><span class="nv"> </span><span class="s">objects&quot;</span> <span class="nt">actions</span><span class="p">:</span> <span class="p p-Indicator">-</span> <span class="s">&quot;*/*/*&quot;</span> <span class="nt">Curator</span><span class="p">:</span> <span class="nt">actions</span><span class="p">:</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Project/*/read&quot;</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Corpus/*/read&quot;</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Document/*/read&quot;</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Document/annotations/*&quot;</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Concept/*/read&quot;</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Concept/id/write&quot;</span> <span class="p p-Indicator">-</span> <span class="s">&quot;Annotation/*/*/(where:</span><span class="nv"> </span><span class="s">{createdBy:</span><span class="nv"> </span><span class="s">{_ifUser:</span><span class="nv"> </span><span class="s">{username:</span><span class="nv"> </span><span class="s">{IRE:</span><span class="nv"> </span><span class="s">${ctx.claims.preferred_username}}}}})&quot;</span> </pre></div> </div> </div> <div class="section" id="classes-model"> <span id="configuration-classes-model"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Classes Model</a><a class="headerlink" href="#classes-model" title="Permalink to this headline">¶</a></h2> <p>By default, Metadata Studio is started with a <a class="reference external" href="https://gitlab.ontotext.com/sol/omds/metadata-studio/-/blob/master/service/src/main/resources/mant.yaml">SOML schema describing the basic Metadata Studio classes</a> based on a specific <a class="reference internal" href="architecture-and-components.html#architecture-and-components-data-model"><span class="std std-ref">RDF model</span></a>.</p> <p>The schema is kept in the <code class="docutils literal notranslate"><span class="pre">otp-system</span></code> repository in GraphDB. Any data that comes in through runtime mutations is validated against this model.</p> <p>The schema must describe any specific document classes, concept classes, and annotations based on the specific user needs.</p> <p>The default schema can be overwritten in any of the following ways:</p> <ul class="simple"> <li>by changing the initial schema on deployment</li> <li>at runtime through GraphQL mutations</li> <li>at runtime through the Metadata Studio UI</li> </ul> <p>The schema does not contain any specific Concepts or Annotations classes. The following classes can be configured through the UI:</p> <ul class="simple"> <li>Documents</li> <li>Annotations</li> <li>Concepts</li> </ul> <p>Currently, Metadata Studio does not support the defining of custom Projects, Corpora, SavedReports, Users and AnnotationServices types that extend the original ones.</p> <p>The following sections talk about defining custom <a class="reference internal" href="#configuration-classes-model-custom-document-classes"><span class="std std-ref">Document</span></a>, <a class="reference internal" href="#configuration-classes-model-custom-annotation-classes"><span class="std std-ref">Annotation</span></a>, and <a class="reference internal" href="#configuration-classes-model-custom-concept-classes"><span class="std std-ref">Concept</span></a> classes.</p> <div class="section" id="rdf-model"> <span id="configuration-classes-model-rdf-model"></span><h3><a class="toc-backref" href="#what-s-in-this-document">RDF model</a><a class="headerlink" href="#rdf-model" title="Permalink to this headline">¶</a></h3> <p>In the <a class="reference internal" href="architecture-and-components.html#architecture-and-components-data-model"><span class="std std-ref">base RDF model</span></a> of Metadata Studio, predicates that are part of the abstract classes are inherited in the more specific TimeSensitive and NamedEntity classes.</p> <div class="section" id="objects-and-predicates"> <span id="configuration-classes-model-rdf-model-objects-and-predicates"></span><h4><a class="toc-backref" href="#what-s-in-this-document">Objects and predicates</a><a class="headerlink" href="#objects-and-predicates" title="Permalink to this headline">¶</a></h4> <p>Metadata Studio uses the depicted objects and predicates for each object as follows:</p> <ul> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:Metadata</span></code>: Key-value object that contains various metadata.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:field</span></code>: The name of the field.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:value</span></code>: The value for the field.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:TimeSensitive</span></code></p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:createdAt</span></code>: The time at which the resource was created.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:createdBy</span></code>: Link to the user IRI that created the resource.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:modifiedAt</span></code>: The time at which the resource was last modified. Note that the change of this value is handled by the Metadata Studio UI, so whenever you apply a mutation to an object through the <code class="docutils literal notranslate"><span class="pre">/graphql</span></code> endpoint or through RDF, you need to update the <code class="docutils literal notranslate"><span class="pre">modifiedAt</span></code> value for this object yourself.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:modifiedBy</span></code>: Link to the user’s IRI that was the last one to modified the resource. Note that the change of this value is handled by the Metadata Studio UI, so whenever you apply a mutation to an object through the <code class="docutils literal notranslate"><span class="pre">/graphql</span></code> endpoint or through RDF, you need to update the <code class="docutils literal notranslate"><span class="pre">modifiedBy</span></code> value for this object yourself.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:Project</span></code>: The project type.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:status</span></code>: The status of the project. Possible values are “ACTIVE” and “ARCHIVED”. Archived projects cannot be edited further.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:corpus</span></code>: Link to a corpus that is part of the project.</li> <li><code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code>: The label of the project that is displayed in the Metadata Studio UI <a class="reference internal" href="projects-view.html"><span class="doc">Projects view</span></a>.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:Corpus</span></code>: The corpus type.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:status</span></code>: The status of the corpus. Possible values are “ACTIVE” and “ARCHIVED”. Archived corpora cannot be edited further.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:document</span></code> : Link to a document that is part of the corpus.</li> <li><code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code>: The label of the corpus that is displayed in the Metadata Studio UI <a class="reference internal" href="projects-view.html"><span class="doc">Projects view</span></a>.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:Document</span></code>: The abstract document type.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:text</span></code>: The content of the document.</li> <li><code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code>: The label of the document that is displayed in the Metadata Studio UI <a class="reference internal" href="corpora-view.html"><span class="doc">Corpus view</span></a>.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:Annotation</span></code>: The abstract base annotation type. It cannot be extended directly - instead, either the InlineAnnotation or the DocumentAnnotation class must be extended.</p> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:DocumentAnnotation</span></code>: The abstract document annotation type.</p> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:InlineAnnotation</span></code>: The abstract inline annotation type.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:annotationStart</span></code>: The start positioning offset of the inline annotation.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:annotationEnd</span></code>: The end positioning offset of the inline annotation.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:Concept</span></code>: The abstract concept type.</p> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:SavedReport</span></code>: The saved report’s type.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">base-iri:corpusId</span></code>: The IRI of the corpus as a string value.</li> <li><code class="docutils literal notranslate"><span class="pre">base-iri:data</span></code>: The report results serialized in JSON.</li> <li><code class="docutils literal notranslate"><span class="pre">base-iri:config</span></code>: The report configurations serialized in JSON.</li> <li><code class="docutils literal notranslate"><span class="pre">base-iri:reportType</span></code>: The type of the report - either “FREQUENCY_COOCCURRENCE” or “F1” .</li> <li><code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code>: The label of the report that will be visualized in the Metadata Studio UI <a class="reference internal" href="reports-view.html"><span class="doc">Reports view</span></a>.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:NamedEntity</span></code>: The abstract class that is the range value for <code class="docutils literal notranslate"><span class="pre">omds:createdBy</span></code> and <code class="docutils literal notranslate"><span class="pre">omds:modifiedBy</span></code> values for all resources.</p> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:User</span></code>: The user type.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:username</span></code>: The username of the user. By default, this value is used to build the user’s identifier as described in the <a class="reference internal" href="#configuration-users"><span class="std std-ref">users creation</span></a> section, so it needs to satisfy the requirements described in the section.</li> <li><code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code>: The label for the user that is presented in the Metadata Studio UI.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">omds:AnnotationService</span></code>: The annotation service type. Unlike all the other objects in Metadata Studio which are stored in the <code class="docutils literal notranslate"><span class="pre">omds</span></code> GraphDB repository, some of the information about annotation services is stored in the <code class="docutils literal notranslate"><span class="pre">otp-system</span></code> repository.</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">omds:annotationQuery</span></code> (in <code class="docutils literal notranslate"><span class="pre">otp-system</span></code> repository): The query that is used during corpus annotation for the particular annotation service.</li> <li><code class="docutils literal notranslate"><span class="pre">omds:registrationQuery</span></code> (in <code class="docutils literal notranslate"><span class="pre">otp-system</span></code> repository): The query with which the particular annotation service was registered in the <code class="docutils literal notranslate"><span class="pre">omds</span></code> repository.</li> <li><code class="docutils literal notranslate"><span class="pre">base-iri:serviceId</span></code> (in <code class="docutils literal notranslate"><span class="pre">otp-system</span></code> repository): The ID of the annotation service used by the UI.</li> <li><code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code> (in <code class="docutils literal notranslate"><span class="pre">omds</span></code> repository): The label for the annotation service to visualize in the UI.</li> </ul> </div></blockquote> </li> </ul> </div> </div> <div class="section" id="custom-document-classes"> <span id="configuration-classes-model-custom-document-classes"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Custom document classes</a><a class="headerlink" href="#custom-document-classes" title="Permalink to this headline">¶</a></h3> <p>The default document class in Metadata Studio is defined as <code class="docutils literal notranslate"><span class="pre">abstract</span></code>. This means that the application relies on custom non-abstract document classes to be defined. In the default Metadata Studio schema, this is the <code class="docutils literal notranslate"><span class="pre">SimpleDocument</span></code> object.</p> <p>A custom document class can be introduced, for example – <code class="docutils literal notranslate"><span class="pre">Article</span></code>, <code class="docutils literal notranslate"><span class="pre">Heard</span></code>, <code class="docutils literal notranslate"><span class="pre">CV</span></code>, <code class="docutils literal notranslate"><span class="pre">MedicalPrescription</span></code>, etc. The custom document class can have custom fields that the user can input. These fields can be visualized in the <a class="reference internal" href="corpora-view.html"><span class="doc">Corpora view</span></a> or they can be used for filtering the documents in the Corpora view and in the <a class="reference internal" href="reports-view.html"><span class="doc">Reports</span></a>.</p> <p>For example, if you want to define a Legal Contract document and specify the business activity purpose of the document as a category (such as Joint Venture agreement, NDA agreement, Employment contracts, etc), you can do this from the <a class="reference internal" href="projects-view.html#projects-view-manage-schema"><span class="std std-ref">Manage schema</span></a> view in the UI, or you can define a custom document class in the SOML schema as follows:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">LegalContract</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Document</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">omds:LegalContract</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">category</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Category&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> max</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">category</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> </pre></div> </div> <p>Alternatively, you can apply the following mutation at runtime against the Metadata Studio backend <code class="docutils literal notranslate"><span class="pre">/graphql</span></code> endpoint:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomDocument</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span> objects: <span class="p">{</span> sys_id: <span class="s2">&quot;LegalContract&quot;</span> <span class="s2"> sys_inherits: &quot;voc:Document&quot;</span> <span class="s2"> sys_type: &quot;omds:LegalContract&quot;</span> <span class="s2"> sys_props: {</span> <span class="s2"> sys_Property: [</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;category&quot;</span> <span class="s2"> sys_range: &quot;string&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:category&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true}&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>Once you have declared your custom document class, you can create actual documents in your corpus either through the Metadata Studio UI client or by <a class="reference internal" href="#configuration-creating-objects-creating-documents"><span class="std std-ref">inserting RDF data in GraphDB</span></a>.</p> </div> <div class="section" id="custom-annotation-classes"> <span id="configuration-classes-model-custom-annotation-classes"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Custom annotation classes</a><a class="headerlink" href="#custom-annotation-classes" title="Permalink to this headline">¶</a></h3> <p>Specific annotation classes that you would like to create in your corpus need to be configured by you. Each custom annotation class must extend one of the base annotation classes - either <code class="docutils literal notranslate"><span class="pre">DocumentAnnotation</span></code> (assigned as document tags) or <code class="docutils literal notranslate"><span class="pre">InlineAnnotation</span></code> (assigned to specific a substring of the document).</p> <p>Besides the properties inherited from the base annotation class, each custom annotation can have custom properties. Each property must be defined with its property characteristics. A subset of the property characteristics supported by the <a class="reference external" href="https://platform.ontotext.com/semantic-objects/soml/properties.html#property-characteristics">Ontotext Platform Semantic Objects</a> are also supported in Metadata Studio:</p> <ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">range</span></code>: Specifies the class of the values of the property.</li> <li><code class="docutils literal notranslate"><span class="pre">rdfProp</span></code>: Specifies the RDF predicate with which the property is stored in GraphDB.</li> <li><code class="docutils literal notranslate"><span class="pre">min</span></code>: Currently, the highest supported value for all properties is 1. If the min cardinality for a field is 1, the UI enforces the user to enter a value for this field when creating annotations.</li> <li><code class="docutils literal notranslate"><span class="pre">max</span></code>: Currently, the highest supported value for all properties is 1.</li> </ul> <p>In addition, a new property characteristic called <code class="docutils literal notranslate"><span class="pre">meta</span></code> is introduced. It controls how the UI visualizes and uses the property. The <code class="docutils literal notranslate"><span class="pre">meta</span></code> characteristic supports the following nested fields:</p> <ul> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">search</span></code>: controls how the field is considered when the object is visualized in search views:</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">visible</span></code> (type:boolean, default=false): Determines if the field is visible in search views, for example in the Document List view and in the Entity Linking view.</li> <li><code class="docutils literal notranslate"><span class="pre">order</span></code> (type: integer, default=-1): Determines the order in which the field is visualized, if visible. The fields are ordered in ascending order and all fields with order -1 are placed last.</li> </ul> </div></blockquote> </li> <li><p class="first"><code class="docutils literal notranslate"><span class="pre">form</span></code>: Controls how the field is considered when an instance of the class is created from or visualized in the UI:</p> <blockquote> <div><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">visible</span></code> (type: boolean, default=false): Whether to visualize the field in creation/preview forms.</li> <li><code class="docutils literal notranslate"><span class="pre">editable</span></code> (type: boolean, default=true): If visible=true, whether the user is allowed to edit the field or not.</li> <li><code class="docutils literal notranslate"><span class="pre">order</span></code> (type: integer, default=-1): The order in which the fields are ordered. The fields are ordered in ascending order and all fields with order -1 are placed last.</li> </ul> </div></blockquote> </li> </ul> <p>These <code class="docutils literal notranslate"><span class="pre">meta</span></code> characteristics are configurable through the SOML schema and GraphQL mutations, but are not yet exposed for configuration from the Metadata Studio UI.</p> <p>For more information on the properties, please see the <a class="reference external" href="https://gitlab.ontotext.com/sol/omds/metadata-studio/-/blob/master/web/docs/developers-guide.md#class-fields-presentation-configuration">developers documentation</a>.</p> <p>Custom annotation classes can inherit either the <code class="docutils literal notranslate"><span class="pre">DocumentAnnotation</span></code> or the <code class="docutils literal notranslate"><span class="pre">InlineAnnotation</span></code> class.</p> <div class="section" id="documentannotation-classes"> <span id="configuration-classes-model-custom-annotation-classes-documentannotation-classes"></span><h4><a class="toc-backref" href="#what-s-in-this-document">DocumentAnnotation classes</a><a class="headerlink" href="#documentannotation-classes" title="Permalink to this headline">¶</a></h4> <p>Document annotations are annotations created for the whole document as opposed to for a specific part of the text. This is the more general way to create annotations that will fit most use cases where it is not vital to know where exactly in the document something was mentioned.</p> <p>Document annotations can have custom fields assigned to them with specific metadata. For example, if we want to define a custom document annotation type for legal contract agreement dates, besides doing that through the <a class="reference internal" href="projects-view.html#projects-view-manage-schema"><span class="std std-ref">Manage schema</span></a> view, we could have the following configuration in the SOML schema:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">AgreementDate</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">DocumentAnnotation</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://cuad.ontotext.com/DocumentAnnotation/AgreementDate</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">value</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">value</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="nt">relevanceScore</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">double</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">relevanceScore</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> </pre></div> </div> <p>where the <code class="docutils literal notranslate"><span class="pre">value</span></code> property will contain the actual date, for example “20 Nov 1991”.</p> <p>Alternatively, the GraphQL mutation for registering this document annotation type would be:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomDocumentAnnotation</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span> objects: <span class="p">{</span> sys_id: <span class="s2">&quot;AgreementDate&quot;</span> <span class="s2"> sys_inherits: &quot;voc:DocumentAnnotation&quot;</span> <span class="s2"> sys_type: &quot;http://cuad.ontotext.com/DocumentAnnotation/AgreementDate&quot;</span> <span class="s2"> sys_props: {</span> <span class="s2"> sys_Property: [</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;value&quot;</span> <span class="s2"> sys_range: &quot;string&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:value&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 1}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 1}&quot;</span> <span class="s2"> }</span> <span class="s2"> ]</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;relevanceScore&quot;</span> <span class="s2"> sys_range: &quot;double&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:relevanceScore&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 2}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 2}&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>Or you can use the UI <a class="reference internal" href="projects-view.html#projects-view-manage-schema"><span class="std std-ref">Manage schema</span></a> view to extend the DocumentAnnotation class with your custom definition.</p> <p>In addition to custom fields, Metadata Studio also supports a <code class="docutils literal notranslate"><span class="pre">metadata</span></code> field with a <code class="docutils literal notranslate"><span class="pre">meta</span></code> characteristic specifying a <code class="docutils literal notranslate"><span class="pre">preview</span></code> field that controls how the object is visualized in simple previews. The <code class="docutils literal notranslate"><span class="pre">preview</span></code> option has a <code class="docutils literal notranslate"><span class="pre">fields</span></code> argument – a list of fields to be visualized in object preview. This is useful for limiting the information shown in the document annotation previews by removing unreadable fields with little value to the user such as identifiers, <code class="docutils literal notranslate"><span class="pre">modifiedBy</span></code> fields, etc. This feature currently applies to annotations only and does not impact Corpora, Projects, and Documents.</p> <p>If we want to define an <code class="docutils literal notranslate"><span class="pre">AgreementDate</span></code> document annotation, which contains the value of the date in the annotation preview, we would add the <code class="docutils literal notranslate"><span class="pre">metadata</span></code> field like this:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">AgreementDate</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">DocumentAnnotation</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://cuad.ontotext.com/DocumentAnnotation/AgreementDate</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">value</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">value</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="nt">relevanceScore</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">double</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">relevanceScore</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> preview</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> fields</span><span class="p">:</span> <span class="p p-Indicator">[</span> <span class="s">&quot;value&quot;</span> <span class="p p-Indicator">]</span> <span class="p p-Indicator">},</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">false</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">false</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> </pre></div> </div> <p>The above SOML definition is equivalent to applying the following GraphQL mutation to the Metadata Studio backend:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomDocumentAnnotation</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span> objects: <span class="p">{</span> sys_id: <span class="s2">&quot;AgreementDate&quot;</span> <span class="s2"> sys_inherits: &quot;voc:DocumentAnnotation&quot;</span> <span class="s2"> sys_type: &quot;http://cuad.ontotext.com/DocumentAnnotation/AgreementDate&quot;</span> <span class="s2"> sys_props: {</span> <span class="s2"> sys_Property: [</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;value&quot;</span> <span class="s2"> sys_range: &quot;string&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:value&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 1}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 1}&quot;</span> <span class="s2"> }</span> <span class="s2"> ]</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;relevanceScore&quot;</span> <span class="s2"> sys_range: &quot;double&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:relevanceScore&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 2}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 2}&quot;</span> <span class="s2"> }</span> <span class="s2"> ]</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;metadata&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;preview&quot;, sys_values: &quot;{ fields: [value] }&quot; }</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: false }&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: false, editable: false }&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>All of the fields of the annotations can be used to sort the document annotations in the Document view. If you would like to have the annotations sorted by a specific field by default, you can provide a <code class="docutils literal notranslate"><span class="pre">defaultSortField</span></code> to the <code class="docutils literal notranslate"><span class="pre">preview</span></code> with the name of the field that you want to perform base sorting on. Upon opening the Document view, the document annotations are then sorted by the specified field value in ascending order. The last sorting selection in the document view is saved as the user’s sorting preference, so from then on the sorting will appear based on the last sorting selection.</p> <p>For example:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomDocumentAnnotation</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span> objects: <span class="p">{</span> sys_id: <span class="s2">&quot;AgreementDate&quot;</span> <span class="s2"> sys_inherits: &quot;voc:DocumentAnnotation&quot;</span> <span class="s2"> sys_type: &quot;http://cuad.ontotext.com/DocumentAnnotation/AgreementDate&quot;</span> <span class="s2"> sys_props: {</span> <span class="s2"> sys_Property: [</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;value&quot;</span> <span class="s2"> sys_range: &quot;string&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:value&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 1}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 1}&quot;</span> <span class="s2"> }</span> <span class="s2"> ]</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;relevanceScore&quot;</span> <span class="s2"> sys_range: &quot;double&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:relevanceScore&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 2}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 2}&quot;</span> <span class="s2"> }</span> <span class="s2"> ]</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;metadata&quot;</span> <span class="s2"> sys_range: &quot;string&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:value&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;preview&quot;</span> <span class="s2"> sys_values: &quot;{ fields: [\&quot;value\&quot;, \&quot;relevanceScore\&quot;], defaultSortField: \&quot;relevanceScore\&quot;}&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="inlineannotation-classes"> <span id="configuration-classes-model-custom-annotation-classes-inlineannotation-classes"></span><h4><a class="toc-backref" href="#what-s-in-this-document">InlineAnnotation classes</a><a class="headerlink" href="#inlineannotation-classes" title="Permalink to this headline">¶</a></h4> <p>Inline annotations are annotations that are applicable only to a specific subset of a document. They are used when it is important to know where exactly in the document something was mentioned. This information is particularly important when preparing gold standard corpora for machine learning purposes, as it is useful for the algorithm to have this data.</p> <p>For example, if you want to be able to create inline tags for people in your documents, you can add the following snippet to your SOML schema:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">PersonAnnotation</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">InlineAnnotation</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://knowledge.net/Annotation/Person</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">name</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">name</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}}}</span> </pre></div> </div> <p>This is equivalent to applying the following GraphQL mutation to the Metadata Studio backend:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomInlineAnnotation</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span> objects: <span class="p">{</span> sys_id: <span class="s2">&quot;PersonAnnotation&quot;</span> <span class="s2"> sys_inherits: &quot;voc:InlineAnnotation&quot;</span> <span class="s2"> sys_type: &quot;http://knowledge.net/Annotation/Person&quot;</span> <span class="s2"> sys_props: {</span> <span class="s2"> sys_Property: [</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;name&quot;</span> <span class="s2"> sys_range: &quot;string&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:name&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 1}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 1}&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>If you have People concepts present in your database and you want to link concepts from your reference dataset to the annotations (i.e., perform entity linking), you need to declare your custom concept class as part of the schema (see how to <a class="reference internal" href="#configuration-classes-model-custom-concept-classes"><span class="std std-ref">customize concept classes</span></a>). Then, use the concept class you created as a <code class="docutils literal notranslate"><span class="pre">range</span></code> of the property through which you would like to establish the link.</p> <p>For example, the following snippet defines a PersonAnnotation inline annotation class that has a <code class="docutils literal notranslate"><span class="pre">personEntity</span></code> property whose values are of instances of class <code class="docutils literal notranslate"><span class="pre">Person</span></code>:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">PersonAnnotation</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">InlineAnnotation</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://knowledge.net/Annotation/Person</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">personEntity</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">range</span><span class="p">:</span> <span class="nv">Person</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">person</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">}}}</span> </pre></div> </div> <p>Or you can use a GraphQL mutation instead:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomInlineAnnotation</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span>objects: <span class="p">{</span> sys_id: <span class="s2">&quot;PersonAnnotation&quot;</span> <span class="s2"> sys_inherits: &quot;voc:InlineAnnotation&quot;</span> <span class="s2"> sys_type: &quot;http://knowledge.net/Annotation/Person&quot;</span> <span class="s2"> sys_props: {sys_Property: [</span> <span class="s2"> {sys_id: &quot;personEntity&quot;, sys_range: &quot;Person&quot;, sys_rdfProp: &quot;omds:person&quot;,</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta:[</span> <span class="s2"> {sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 1}&quot;},</span> <span class="s2"> {sys_key: &quot;form&quot;, sys_values: &quot;{ visible: true, editable: true, order: 1}&quot;</span><span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]}</span> <span class="p">})</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>In addition, relation annotations can be modeled to link to more than one concept from the reference dataset. For example, if we want to model a CEO relation annotation between a person and an organization, we can add the following snippet to our SOML schema:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">CEOAnnotation</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">InlineAnnotation</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://knowledge.net/Annotation/CEO</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">subject</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> label</span><span class="p">:</span> <span class="s">&quot;Subject&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">PersonAnnotation</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="nt">object</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> label</span><span class="p">:</span> <span class="s">&quot;Object&quot;</span><span class="p p-Indicator">,</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">OrganizationAnnotation</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span> <span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">2</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> </pre></div> </div> <p>Or we can apply the following mutation to the <code class="docutils literal notranslate"><span class="pre">/graphql</span></code> endpoint of the Metadata Studio backend:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createCustomInlineAnnotation</span> <span class="p">{</span> <span class="k">create_sys_ObjectClass</span><span class="p">(</span> objects: <span class="p">{</span> sys_id: <span class="s2">&quot;CEOAnnotation&quot;</span> <span class="s2"> sys_inherits: &quot;voc:InlineAnnotation&quot;</span> <span class="s2"> sys_type: &quot;http://knowledge.net/Annotation/CEO&quot;</span> <span class="s2"> sys_props: {</span> <span class="s2"> sys_Property: [</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;subject&quot;</span> <span class="s2"> sys_range: &quot;PersonAnnotation&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:subject&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 1}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 1}&quot;</span> <span class="s2"> }</span> <span class="s2"> ]</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> {</span> <span class="s2"> sys_id: &quot;object&quot;</span> <span class="s2"> sys_range: &quot;OrganizationAnnotation&quot;</span> <span class="s2"> sys_rdfProp: &quot;omds:object&quot;</span> <span class="s2"> sys_meta: {</span> <span class="s2"> sys_Meta: [</span> <span class="s2"> { sys_key: &quot;search&quot;, sys_values: &quot;{ visible: true, order: 2}&quot; }</span> <span class="s2"> {</span> <span class="s2"> sys_key: &quot;form&quot;</span> <span class="s2"> sys_values: &quot;{ visible: true, editable: true, order: 2}&quot;</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">]</span> <span class="p">}</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">sys_ObjectClass</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>There are two ways to model a relation annotation:</p> <ul class="simple"> <li>It can be modeled to point to other annotations (as in the example above). In this case, when selecting a text in the Metadata Studio UI, you will be allowed to create such a relation only if the nested annotation types have already been created over a substring of the selected text.</li> <li>It can be modeled to point to the objects from the reference dataset directly - in the above example, these are Person and Organization. When creating the relation annotation, you will be prompted to search for the concepts from the reference dataset for the nested entities.</li> </ul> </div> </div> <div class="section" id="custom-concept-classes"> <span id="configuration-classes-model-custom-concept-classes"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Custom concept classes</a><a class="headerlink" href="#custom-concept-classes" title="Permalink to this headline">¶</a></h3> <p>When creating corpora for entity linking tasks, you might want to define custom concept classes. This will allow you to link instances of these classes as part of your annotations.</p> <p>Your custom classes must inherit the default <code class="docutils literal notranslate"><span class="pre">Concept</span></code> class. Similarly to the <a class="reference internal" href="#configuration-classes-model-custom-annotation-classes"><span class="std std-ref">annotations configurations</span></a>, the <code class="docutils literal notranslate"><span class="pre">meta</span></code> property defines which concept fields will be visualized when doing entity linking. The search property defines a query that will be executed when the user creates PersonAnnotations and searches for People with names that match specific text. The <code class="docutils literal notranslate"><span class="pre">{{query}}</span></code> template is replaced at runtime with the specific text that you search for.</p> <p>The following is an example for a declaration of a Person concept class:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">Person</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Concept</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">mycustomprefix:Person</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">description</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">rdfProp</span><span class="p">:</span> <span class="s">&quot;mycustomprefix:description&quot;</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">}}}</span> <span class="nt">search</span><span class="p">:</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">restrictive</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">true</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">?_subject skos:prefLabel|skos:altLabel ?label. filter (regex(str(?label), {{query}}, \&quot;i\&quot;))</span> </pre></div> </div> <p>In case you have GraphDB Elasticsearch/Lucene connectors for better full-text search, these can be used as well. For example:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">search</span><span class="p">:</span> <span class="nt">meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">}}</span> <span class="nt">restrictive</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">true</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="no">?search a inst:people_omds ;</span> <span class="no">elastic:query &#39;&#39;&#39;</span> <span class="no">{</span> <span class="no">&quot;query&quot;: {</span> <span class="no">&quot;function_score&quot;: {</span> <span class="no">&quot;query&quot;: {</span> <span class="no">&quot;match_phrase_prefix&quot;: {</span> <span class="no">&quot;name&quot;: {{query}}</span> <span class="no">}</span> <span class="no">},</span> <span class="no">&quot;script_score&quot;: {</span> <span class="no">&quot;script&quot;: {</span> <span class="no">&quot;source&quot;: &quot;if (!doc.containsKey(&#39;rdfRank&#39;) || doc.get(&#39;rdfRank&#39;).isEmpty()) { return 1; } double rdfRank = doc[&#39;rdfRank&#39;].value; return 1 + Math.max(0, Math.log10(rdfRank * 100))&quot;</span> <span class="no">}</span> <span class="no">}</span> <span class="no">}</span> <span class="no">}</span> <span class="no">}&#39;&#39;&#39; ;</span> <span class="no">elastic:entities ?_subject .</span> </pre></div> </div> <p>Your GraphDB repository (defined through the <code class="docutils literal notranslate"><span class="pre">sparql_endpoint_repository</span></code> property of the Metadata Studio API) must contain instances for the custom concept classes. If this data is located in a different SPARQL repository, you can use a federated service:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">Person</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Concept</span> <span class="nt">sparqlFederatedService</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">wikidata</span> <span class="nt">typeProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">generatedType</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">wd:Q5</span> <span class="nt">props</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">...</span> </pre></div> </div> <p>where the HTTP endpoint location of the Wikidata federated service is configured with the <code class="docutils literal notranslate"><span class="pre">sparql.federated.services.wikidata</span></code> property of the Metadata Studio backend.</p> <p>If you would like to integrate an external service that contains visualizations of the concepts from your custom concept class, you can define the <a class="reference internal" href="#configuration-external-service-creation"><span class="std std-ref">external service</span></a> in your Metadata Studio deployment and link your custom concept class to to this service by pointing to the label of the service:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">Person</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Concept</span> <span class="nt">type</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">mycustomprefix:Person</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">metadata</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">search</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">visible</span><span class="p">:</span> <span class="nv">false</span><span class="p p-Indicator">},</span><span class="nt"> externalService</span><span class="p">:</span> <span class="s">&quot;Wikidata&quot;</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">....</span> </pre></div> </div> </div> <div class="section" id="custom-form-classes"> <span id="configuration-classes-model-custom-form-classes"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Custom form classes</a><a class="headerlink" href="#custom-form-classes" title="Permalink to this headline">¶</a></h3> <p>When creating corpora for entity linking tasks, you might want to define custom form classes. This will allow users to follow a form based approach when the users do not know the types of annotations they need to create. In this case, the users populate a form which refers to a number of predefined annotation types.</p> <p>Your custom classes must inherit the default abstract <code class="docutils literal notranslate"><span class="pre">Form</span></code> class. The properties in your custom Form class must either be with range Form or with range Annotation. The label of the Form will be shown in the form header.</p> <p>The following is an example for a declaration of a Discharge form class:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">DischargeForm</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Form</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Discharge</span><span class="nv"> </span><span class="s">Questionnaire&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">addmission</span><span class="p">:</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Admission</span> <span class="nt">meta</span><span class="p">:</span> <span class="nt">form</span><span class="p">:</span> <span class="nt">order</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">hospitalization</span><span class="p">:</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Hospitalization</span> <span class="nt">meta</span><span class="p">:</span> <span class="nt">form</span><span class="p">:</span> <span class="nt">order</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">2</span> <span class="nt">Admission</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Form</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Admission</span><span class="nv"> </span><span class="s">data&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">patientAge</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Patient&#39;s</span><span class="nv"> </span><span class="s">age&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">PatientAge</span> <span class="nt">meta</span><span class="p">:</span> <span class="nt">form</span><span class="p">:</span> <span class="nt">order</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> </pre></div> </div> <p>In order to visualize Forms for any documents, the document classes used must have <cite>documentForm</cite> field of the <cite>meta</cite> property set. For example:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">SimpleFormDocument</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Document</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">metadata</span><span class="p">:</span> <span class="nt">meta</span><span class="p">:</span> <span class="nt">documentForm</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">DischargeForm</span> </pre></div> </div> </div> </div> <div class="section" id="creating-objects"> <span id="configuration-creating-objects"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Creating Objects</a><a class="headerlink" href="#creating-objects" title="Permalink to this headline">¶</a></h2> <p>This section describes how Metadata Studio can be filled with data by creating concrete objects.</p> <p>Generally, there are two approaches - creating objects through the UI or through RDF. Currently, the UI supports creating instances for all classes except for <a class="reference internal" href="#configuration-users"><span class="std std-ref">Users</span></a> and <a class="reference internal" href="#configuration-annotation-service-creation"><span class="std std-ref">Annotation Services</span></a>, which need to be set up through GraphQL mutations or RDF data.</p> <div class="section" id="creating-projects"> <span id="configuration-creating-objects-creating-projects"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Creating projects</a><a class="headerlink" href="#creating-projects" title="Permalink to this headline">¶</a></h3> <p>The following is an example for the statements that can be inserted in the GraphDB repository (defined through the <code class="docutils literal notranslate"><span class="pre">sparql_endpoint_repository</span></code> property of the Metadata Studio API) in order for a project to appear in the UI:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;projectIRI&gt;</span><span class="w"> </span><span class="kt">a</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">Project</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdAt</span><span class="w"> </span><span class="s">&quot;2022-02-10T14:59:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedAt</span><span class="w"> </span><span class="s">&quot;2022-03-23T09:45:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">status</span><span class="w"> </span><span class="s">&quot;ACTIVE&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">rdfs:</span><span class="nt">label</span><span class="w"> </span><span class="s">&quot;Project Name&quot;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> <p>If you want to enable an <a class="reference internal" href="#configuration-external-service-creation"><span class="std std-ref">external service</span></a> in your project, you need to bind it either through the Metadata Studio UI or through SPARQL like so:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">&lt;projectIRI&gt; a omds:Project ;</span> <span class="l l-Scalar l-Scalar-Plain">omds:createdAt &quot;2022-02-10T14:59:00&quot;^^xsd:dateTime ;</span> <span class="l l-Scalar l-Scalar-Plain">omds:createdBy &lt;userIRI&gt; ;</span> <span class="l l-Scalar l-Scalar-Plain">omds:modifiedAt &quot;2022-03-23T09:45:00&quot;^^xsd:dateTime ;</span> <span class="l l-Scalar l-Scalar-Plain">omds:modifiedBy &lt;userIRI&gt; ;</span> <span class="l l-Scalar l-Scalar-Plain">omds:status &quot;ACTIVE&quot; ;</span> <span class="l l-Scalar l-Scalar-Plain">omds:externalService &lt;externalServiceIRI&gt; ;</span> <span class="l l-Scalar l-Scalar-Plain">rdfs:label &quot;Project Name&quot; .</span> </pre></div> </div> </div> <div class="section" id="creating-corpora"> <span id="configuration-creating-objects-creating-corpora"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Creating corpora</a><a class="headerlink" href="#creating-corpora" title="Permalink to this headline">¶</a></h3> <p>The following is an example for the statements that can be inserted in the GraphDB repository in order for a corpus to appear in the UI:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;projectIRI&gt;</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">corpus</span><span class="w"> </span><span class="nv">&lt;corpusIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nv">&lt;corpusIRI&gt;</span><span class="w"> </span><span class="kt">a</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">Corpus</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdAt</span><span class="w"> </span><span class="s">&quot;2022-03-23T09:45:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedAt</span><span class="w"> </span><span class="s">&quot;2022-03-23T09:45:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">status</span><span class="w"> </span><span class="s">&quot;ACTIVE&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">rdfs:</span><span class="nt">label</span><span class="w"> </span><span class="s">&quot;Corpus Name&quot;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> </div> <div class="section" id="creating-documents"> <span id="configuration-creating-objects-creating-documents"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Creating documents</a><a class="headerlink" href="#creating-documents" title="Permalink to this headline">¶</a></h3> <p>The following is an example for the statements that can be inserted in the GraphDB repository in order for a document to appear in the UI:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;corpusIRI&gt;</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">document</span><span class="w"> </span><span class="nv">&lt;documentIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nv">&lt;documentIRI&gt;</span><span class="w"> </span><span class="nn">rdf:</span><span class="nt">type</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">LegalContract</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">rdfs:</span><span class="nt">label</span><span class="w"> </span><span class="s">&quot;Berkshire Hills Bancorp Inc 2012-08-09&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">text</span><span class="w"> </span><span class="s">&quot;Document content in plain text&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">category</span><span class="w"> </span><span class="s">&quot;Endorsement Agreement&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> </div> <div class="section" id="creating-annotations"> <span id="configuration-creating-objects-creating-annotations"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Creating annotations</a><a class="headerlink" href="#creating-annotations" title="Permalink to this headline">¶</a></h3> <p>The following is an example for the statements that can be inserted in the GraphDB repository in order for an annotation to appear in the UI:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;documentIRI&gt;</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">annotations</span><span class="w"> </span><span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="nn">rdf:</span><span class="nt">type</span><span class="w"> </span><span class="nv">&lt;customAnnotationTypeIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> <p>In case we are working with inline annotations, the following two statements must also be set:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">annotationStart</span><span class="w"> </span><span class="s">&quot;10&quot;</span><span class="o">^^</span><span class="ge">xsd:int</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">annotationEnd</span><span class="w"> </span><span class="s">&quot;20&quot;</span><span class="o">^^</span><span class="ge">xsd:int</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> <p>If the specific annotation type contains custom fields, they can be added to the triples above.</p> <div class="section" id="applying-human-validation-workflow-to-annotations"> <span id="configuration-creating-objects-creating-annotations-review"></span><h4><a class="toc-backref" href="#what-s-in-this-document">Applying Human Validation workflow to annotations</a><a class="headerlink" href="#applying-human-validation-workflow-to-annotations" title="Permalink to this headline">¶</a></h4> <p>The following is an example for the statements that are inserted in the GraphDB repository when an annotation is reviewed in the UI. This can be done using the <a class="reference internal" href="document-view.html#document-view-form-workflow-human-validation-workflow"><span class="std std-ref">Human Validation workflow</span></a>.</p> <p>When an annotation is reviewed as accepted (thumbs up) the fields based on which it has been accepted are deep-copied in a new annotation object. The creator of this annotation is the user doing the review process.</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;documentIRI&gt;</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">annotations</span><span class="w"> </span><span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="nn">rdf:</span><span class="nt">type</span><span class="w"> </span><span class="nv">&lt;customAnnotationTypeIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> <p>When an annotation is reviewed as rejected (thumbs down) the fields based on which it has been rejected are deep-copied in а new annotation object. The creator of this annotation is the user doing the review process. In addition, an explicit statement in GraphDB is written to signify this is a rejection.</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="nv">&lt;documentIRI&gt;</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">annotations</span><span class="w"> </span><span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nv">&lt;annotationIRI&gt;</span><span class="w"> </span><span class="nn">rdf:</span><span class="nt">type</span><span class="w"> </span><span class="nv">&lt;customAnnotationTypeIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">reviewStatus</span><span class="w"> </span><span class="nv">&lt;http://www.ontotext.com/metadatastudio/review-status/Rejected&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedAt</span><span class="w"> </span><span class="s">&quot;2022-05-20T08:00:00&quot;</span><span class="o">^^</span><span class="ge">xsd:dateTime</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">createdBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">modifiedBy</span><span class="w"> </span><span class="nv">&lt;userIRI&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">OMDS UI includes in the annotation review process all form fields modeled as visible and editable. More information on how to model form fields available in the Custom annotation classes section.</p> </div> </div> </div> <div class="section" id="creating-forms"> <span id="configuration-creating-objects-creating-forms"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Creating forms</a><a class="headerlink" href="#creating-forms" title="Permalink to this headline">¶</a></h3> <p>There is no need to create instances of type Form in GraphDB repository. Whenever new forms need to be added or the forms structure is changed, the changes should be reflected in the SOML configuration of the form types, their labels and properties.</p> <div class="admonition warning"> <p class="first admonition-title">Warning</p> <p class="last">During the design of the annotation schema, make sure all form properties are unique, as duplication will lead to unwanted behaviour in the Form view in the Document view, such as seemingly identical values to annotations pointing to identical range objects.</p> </div> </div> </div> <div class="section" id="validating-objects"> <span id="configuration-validating-objects"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Validating Objects</a><a class="headerlink" href="#validating-objects" title="Permalink to this headline">¶</a></h2> <p>This section describes how Metadata Studio can be configured to apply field validations upon creation of concrete objects.</p> <p>Generally, validation happens on the backend so validation constraints need to be configured in the SOML. Currently, the SOML validation will be picked up by the UI when the SOML has the following configuration that is present in the default SOML:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">config</span><span class="p">:</span> <span class="nt">exposeSomlInGraphQL</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">true</span> </pre></div> </div> <p>All possible validation characteristics are listed in the <a class="reference external" href="https://platform.ontotext.com/semantic-objects/soml/properties.html#property-characteristics">Property Characteristics</a> section of the Semantic Objects.</p> <div class="section" id="validating-annotation-fields"> <span id="configuration-validating-objects-validation-example"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Validating Annotation fields</a><a class="headerlink" href="#validating-annotation-fields" title="Permalink to this headline">¶</a></h3> <p>Any object class fields can be configured with validation constraints. The following is an example how “age” field in a PersonalInformation annotation objects is configured to be an integer within the range of 0 to 120.</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">PersonalInformation</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">DocumentAnnotation</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">name</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">string</span><span class="p p-Indicator">,</span><span class="nt"> min</span><span class="p">:</span> <span class="nv">1</span><span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">0</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="nt">age</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> range</span><span class="p">:</span> <span class="nv">integer</span><span class="p p-Indicator">,</span><span class="nt"> minInclusive</span><span class="p">:</span> <span class="nv">0</span><span class="p p-Indicator">,</span><span class="nt"> maxInclusive</span><span class="p">:</span> <span class="nv">120</span> <span class="p p-Indicator">,</span><span class="nt"> meta</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> form</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt"> visible</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> editable</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> order</span><span class="p">:</span> <span class="nv">1</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> </pre></div> </div> </div> </div> <div class="section" id="conditional-objects"> <span id="configuration-conditional-objects"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Conditional Objects</a><a class="headerlink" href="#conditional-objects" title="Permalink to this headline">¶</a></h2> <p>This section describes how Metadata Studio can be configured to show specific object’s properties only when given conditions are met. This is a feature supported in the Form view.</p> <p>There are two things that need to be configured:</p> <ul class="simple"> <li>a condition using SPARQL is defined as a property in the <code class="docutils literal notranslate"><span class="pre">FormConditions</span></code> object.</li> <li>a specific Form property references the condition in its <code class="docutils literal notranslate"><span class="pre">meta:</span> <span class="pre">form:</span> <span class="pre">visibleCondition</span></code> field.</li> </ul> <div class="section" id="conditional-form-fields"> <span id="configuration-conditional-objects-example"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Conditional Form fields</a><a class="headerlink" href="#conditional-form-fields" title="Permalink to this headline">¶</a></h3> <p>Any Form field can be conditional - meaning it will appear visible in Metadata Studio only if certain condition is met. The following is an example how “DrivingLicense” annotation in a PersonalInformation form section is configured to be visible only if a person is of legal age.</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">FormConditions</span><span class="p">:</span> <span class="nt">typeProp</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">none</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">legalAgeCondition</span><span class="p">:</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">boolean</span> <span class="nt">rdfProp</span><span class="p">:</span> <span class="p p-Indicator">|</span> <span class="l l-Scalar l-Scalar-Plain">BIND(&quot;conditions&quot; as ?_subject).</span> <span class="p p-Indicator">{</span> <span class="nv">select (count(</span><span class="p p-Indicator">?</span><span class="nv">ann) as</span> <span class="p p-Indicator">?</span><span class="nv">exists) where</span> <span class="p p-Indicator">{</span> <span class="p p-Indicator">{{</span><span class="nv">document</span><span class="p p-Indicator">:</span><span class="nv">iri</span><span class="p p-Indicator">}}</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">annotations</span> <span class="p p-Indicator">?</span><span class="nv">ann.</span> <span class="p p-Indicator">?</span><span class="nv">ann a voc</span><span class="p p-Indicator">:</span><span class="nv">PersonAge.</span> <span class="p p-Indicator">?</span><span class="nv">ann voc</span><span class="p p-Indicator">:</span><span class="nv">age</span> <span class="p p-Indicator">?</span><span class="nv">age.</span> <span class="nv">FILTER(</span><span class="p p-Indicator">?</span><span class="nv">age &gt; 18).</span> <span class="p p-Indicator">}</span> <span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">BIND(?exists &gt; 0 AS ?_value)</span> <span class="nt">PersonalInformation</span><span class="p">:</span> <span class="nt">inherits</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Form</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Provide</span><span class="nv"> </span><span class="s">Personal</span><span class="nv"> </span><span class="s">Information&quot;</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">personAge</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Age&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">PersonAge</span> <span class="nt">meta</span><span class="p">:</span> <span class="nt">form</span><span class="p">:</span> <span class="nt">order</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">1</span> <span class="nt">drivingLicense</span><span class="p">:</span> <span class="nt">label</span><span class="p">:</span> <span class="s">&quot;Driving</span><span class="nv"> </span><span class="s">License&quot;</span> <span class="nt">range</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">DrivingLicense</span> <span class="nt">meta</span><span class="p">:</span> <span class="nt">form</span><span class="p">:</span> <span class="nt">order</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">2</span> <span class="nt">visibleCondition</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">legalAgeCondition</span> </pre></div> </div> </div> </div> <div class="section" id="users"> <span id="configuration-users"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Users</a><a class="headerlink" href="#users" title="Permalink to this headline">¶</a></h2> <p>Depending on the OAuth2 service that you would like to use, the users need to be configured in the specific service storage. The Metadata Studio deployment comes with <a class="reference external" href="https://www.keycloak.org">Keycloak</a> as a default user management solution.</p> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">Usernames cannot contain whitespace characters. The reason is that the Metadata Studio tool relies on the convention that the concatenation between <code class="docutils literal notranslate"><span class="pre">http://www.ontotext.com/metadatastudio/user/</span></code> and the username must result in a valid IRI.</p> </div> <p>Once you log in to Metadata Studio with a specific user, all objects that this user creates are assigned with <code class="docutils literal notranslate"><span class="pre">createdBy</span></code> and <code class="docutils literal notranslate"><span class="pre">modifiedBy</span></code> fields that point to the specific user identifier.</p> <p>If you set up initial RDF data for projects, corpora, documents, or annotations, in order for the UI to be able to visualize the user references from the <code class="docutils literal notranslate"><span class="pre">createdBy</span></code> and <code class="docutils literal notranslate"><span class="pre">modifiedBy</span></code> predicates, a username must be defined in the database:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="k">PREFIX</span><span class="w"> </span><span class="nn">omds:</span><span class="w"> </span><span class="nv">&lt;http://www.ontotext.com/metadatastudio#&gt;</span><span class="w"></span> <span class="nv">&lt;http://www.ontotext.com/metadatastudio/user/borislav&gt;</span><span class="w"> </span><span class="kt">a</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">User</span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">username</span><span class="w"> </span><span class="s">&quot;Borislav&quot;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> </pre></div> </div> <p>Note that the exact predicate for the username needs to be synced with the predicate defined for the user’s <code class="docutils literal notranslate"><span class="pre">username</span></code> field in the <a class="reference internal" href="#configuration-default-schema"><span class="std std-ref">default SOML schema</span></a>, which by default looks like this:</p> <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">User</span><span class="p">:</span> <span class="nt">props</span><span class="p">:</span> <span class="nt">username</span><span class="p">:</span> <span class="p p-Indicator">{</span><span class="nt">readOnly</span><span class="p">:</span> <span class="nv">true</span><span class="p p-Indicator">,</span><span class="nt"> rdfProp</span><span class="p">:</span> <span class="nv">omds</span><span class="p p-Indicator">:</span><span class="nv">username</span><span class="p p-Indicator">}</span> <span class="l l-Scalar l-Scalar-Plain">...</span> </pre></div> </div> <p>By default, Metadata Studio has the following user roles:</p> <ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">Default</span></code>: Restricts access to everything if the logged-in user does not have any roles assigned.</li> <li><code class="docutils literal notranslate"><span class="pre">Curator</span></code>: Grants read access to all resources as well as right to create annotations for existing documents.</li> <li><code class="docutils literal notranslate"><span class="pre">Admin</span></code>: Grants all actions on all objects and their properties to a user with that role.</li> <li><code class="docutils literal notranslate"><span class="pre">SchemaRBACAdmin</span></code>: Allows the user to modify the SOML schema.</li> </ul> <p>New roles can be added and modified by a user with a <code class="docutils literal notranslate"><span class="pre">SchemaRBACAdmin</span></code> role. For more information on the syntax of the RBAC schema, see the official Ontotext Platform Semantic Objects <a class="reference external" href="https://platform.ontotext.com/semantic-objects/soml/rbac.html">documentation</a>.</p> </div> <div class="section" id="creating-annotation-services"> <span id="configuration-annotation-service-creation"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Creating Annotation Services</a><a class="headerlink" href="#creating-annotation-services" title="Permalink to this headline">¶</a></h2> <p>If a third-party text analysis annotation service needs to be integrated in Metadata Studio, a query to register the text analysis service and to handle the annotation needs to be configured. Metadata Studio relies on the GraphDB Text Mining plugin to integrate with arbitrary third-party text analysis services. Unlike the other configurable components, the text mining annotation query cannot be configured through the Metadata Studio UI yet. It needs to be set up by applying a GraphQL mutation to the Metadata Studio API. The mutation registers the annotation service with:</p> <ul class="simple"> <li>a specific text mining plugin registration query</li> <li>a specific annotation query</li> </ul> <p>The <code class="docutils literal notranslate"><span class="pre">AnnotationService</span></code> object has a <code class="docutils literal notranslate"><span class="pre">label</span></code> and a <code class="docutils literal notranslate"><span class="pre">serviceId</span></code>. The <code class="docutils literal notranslate"><span class="pre">label</span></code> controls the label with which the <code class="docutils literal notranslate"><span class="pre">annotationService</span></code> will be visualized in the UI under the <span class="guilabel">Annotation services</span> drop-down.</p> <div class="section" id="registration-query"> <span id="configuration-annotation-service-creation-registration-query"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Registration query</a><a class="headerlink" href="#registration-query" title="Permalink to this headline">¶</a></h3> <p>The registration query is a query that instantiates the <a class="reference external" href="https://graphdb.ontotext.com/documentation/10.1/text-mining-plugin.html">GraphDB Text Mining plugin</a>. It must specify the URL to the text mining service, the headers that must be sent during annotation requests, and any specific transformations that should be applied over the annotation response.</p> <p>In addition, it creates a label for the annotation service that the UI uses to visualize the service creator source.</p> <p>For more information on how to register text mining plugins, check the <a class="reference external" href="https://graphdb.ontotext.com/documentation/10.1/text-mining-plugin.html">GraphDB documentation</a>.</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">mutation</span> <span class="n">createLegalTaggerServiceExample</span> <span class="p">{</span> <span class="n">create_AnnotationService</span><span class="p">(</span> <span class="n">objects</span><span class="p">:</span> <span class="p">{</span> <span class="n">label</span><span class="p">:</span> <span class="s2">&quot;Legal Tagger&quot;</span><span class="p">,</span> <span class="n">serviceId</span><span class="p">:</span> <span class="s2">&quot;http://cuad.ontotext.com/legalTagger&quot;</span><span class="p">,</span> <span class="n">createdBy</span><span class="p">:</span> <span class="s2">&quot;some-user-identifier&quot;</span><span class="p">,</span> <span class="n">createdAt</span><span class="p">:</span> <span class="s2">&quot;some-timestamp&quot;</span><span class="p">,</span> <span class="n">registrationQuery</span><span class="p">:</span> <span class="s2">&quot;&quot;&quot;</span> <span class="s2"> PREFIX : &lt;http://www.ontotext.com/textmining#&gt;</span> <span class="s2"> PREFIX inst: &lt;http://www.ontotext.com/textmining/instance#&gt;</span> <span class="s2"> PREFIX cuad: &lt;http://cuad.ontotext.com/&gt;</span> <span class="s2"> INSERT DATA {</span> <span class="s2"> inst:legalTagger :connect :Ces;</span> <span class="s2"> :service &quot;some-url-here&quot; ;</span> <span class="s2"> :header &quot;Accept: application/vnd.ontotext.ces+json;charset=utf-8&quot;;</span> <span class="s2"> :header &quot;Content-type: text/plain&quot;.</span> <span class="s2"> cuad:legalTagger a &lt;http://www.ontotext.com/metadatastudio#AnnotationService&gt; ;</span> <span class="s2"> rdfs:label &quot;Legal Tagger&quot; .</span> <span class="s2"> }</span> <span class="s2"> &quot;&quot;&quot;</span><span class="p">,</span> <span class="n">annotationQuery</span><span class="p">:</span> <span class="o">....</span> <span class="o">....</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="n">annotationService</span> <span class="p">{</span> <span class="nb">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>It is recommended that the IRI identifier that we declare as an annotation service and the specific <code class="docutils literal notranslate"><span class="pre">rdfs:label</span></code> match the <code class="docutils literal notranslate"><span class="pre">serviceId</span></code> and <code class="docutils literal notranslate"><span class="pre">label</span></code> values from the mutation.</p> </div> <div class="section" id="annotation-query"> <span id="configuration-annotation-service-creation-annotation-query"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Annotation query</a><a class="headerlink" href="#annotation-query" title="Permalink to this headline">¶</a></h3> <p>Upon selection of a specific annotation service for a particular corpus, the Metadata Studio backend splits the documents from the corpus into batches of ten documents. It then sends the documents from each batch to the text mining API service to generate annotations for these documents.</p> <p>The annotation query defines how the documents should be sent for annotation and how the response should be stored in GraphDB. It is entirely configurable by the user, which makes this process compatible with any third-party services accessible through HTTP, which produce annotations with text position offsets.</p> <p>The annotation query also takes care of cleaning up previously existing annotations from the same text mining API service, which allows you to execute multiple annotation processes over the same corpus over time.</p> <div class="admonition tip"> <p class="first admonition-title">Tip</p> <p class="last">It is a good practice to keep the annotations from each annotation service in a specific context, as this makes the maintenance of the data easier. The format in which the annotations are stored should correspond to the format defined in the <a class="reference internal" href="#configuration-classes-model-custom-annotation-classes"><span class="std std-ref">Custom annotations</span></a> section. The <code class="docutils literal notranslate"><span class="pre">createdBy</span></code> and <code class="docutils literal notranslate"><span class="pre">modifiedBy</span></code> fields should point to the IRI of the specific annotation service.</p> </div> <p>Following is an example for an annotation query that creates inline annotations returned from the Legal tagger:</p> <div class="highlight-GraphQL notranslate"><div class="highlight"><pre><span></span><span class="kt">mutation</span> <span class="k">createLegalTaggerServiceExample</span> <span class="p">{</span> <span class="k">create_AnnotationService</span><span class="p">(</span> objects: <span class="p">{</span> label: <span class="s2">&quot;Legal Tagger&quot;,</span> <span class="s2"> serviceId: &quot;http://cuad.ontotext.com/legalTagger&quot;,</span> <span class="s2"> createdBy: &quot;some-user-identifier&quot;,</span> <span class="s2"> createdAt: &quot;some-timestamp&quot;,</span> <span class="s2"> registrationQuery: .....,</span> <span class="s2"> annotationQuery: &quot;&quot;&quot;</span> <span class="s2"> PREFIX inst: &lt;http://www.ontotext.com/textmining/instance#&gt;</span> <span class="s2"> PREFIX : &lt;http://www.ontotext.com/textmining#&gt;</span> <span class="s2"> PREFIX xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt;</span> <span class="s2"> PREFIX omds: &lt;http://www.ontotext.com/metadatastudio#&gt;</span> <span class="s2"> PREFIX cuad: &lt;http://cuad.ontotext.com/&gt;</span> <span class="s2"> PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;</span> <span class="s2"> DELETE {</span> <span class="s2"> GRAPH &lt;http://cuad.ontotext.com/legalTagger&gt; {</span> <span class="s2"> ?document omds:annotations ?oldAnnotation .</span> <span class="s2"> ?oldAnnotation ?oldPredicate ?oldObject</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> INSERT {</span> <span class="s2"> GRAPH &lt;http://cuad.ontotext.com/legalTagger&gt; {</span> <span class="s2"> ?annotationId omds:annotationStart ?annotationStart ;</span> <span class="s2"> omds:annotationEnd ?annotationEnd ;</span> <span class="s2"> omds:document ?document ;</span> <span class="s2"> a omds:Annotation ;</span> <span class="s2"> a ?annotationType ;</span> <span class="s2"> omds:createdBy cuad:legalTagger ;</span> <span class="s2"> omds:createdAt ?time ;</span> <span class="s2"> omds:modifiedBy cuad:legalTagger ;</span> <span class="s2"> omds:modifiedAt ?time ;</span> <span class="s2"> ?answerPredicate ?answer .</span> <span class="s2"> ?document omds:annotations ?annotationId .</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> WHERE {</span> <span class="s2"> {</span> <span class="s2"> ?service a inst:tagService;</span> <span class="s2"> :text ?text ;</span> <span class="s2"> :serviceErrors -1 .</span> <span class="s2"> {</span> <span class="s2"> SELECT ?text ?document ?time WHERE {</span> <span class="s2"> VALUES ?document {</span> <span class="s2"> {{documents}}</span> <span class="s2"> }</span> <span class="s2"> ?document omds:text ?text .</span> <span class="s2"> BIND(NOW() as ?time)</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> graph inst:legalTagger {</span> <span class="s2"> ?annotatedDocument :annotations ?annotation .</span> <span class="s2"> ?annotation :annotationText ?answer ;</span> <span class="s2"> :annotationType ?type ;</span> <span class="s2"> :annotationStart ?annotationStartLong ;</span> <span class="s2"> :annotationEnd ?annotationEndLong .</span> <span class="s2"> ?annotation :features/:class ?class .</span> <span class="s2"> }</span> <span class="s2"> BIND(xsd:int(?annotationStartLong) as ?annotationStart)</span> <span class="s2"> BIND(xsd:int(?annotationEndLong) as ?annotationEnd)</span> <span class="s2"> BIND(IRI(CONCAT(&quot;http://cuad.ontotext.com/InlineAnnotation/&quot;, ?type)) as ?annotationType)</span> <span class="s2"> BIND(IRI(CONCAT(CONCAT(&quot;http://cuad.ontotext.com/InlineAnnotation/&quot;, &quot;Tagger/&quot;, STRUUID()), STRAFTER(STR(?annotation),&quot;-something-that-is-not-present-&quot;))) as ?annotationId)</span> <span class="s2"> }</span> <span class="s2"> UNION # Use union to select also the annotations from previous annotation processes in order to delete them</span> <span class="s2"> {</span> <span class="s2"> GRAPH &lt;http://cuad.ontotext.com/legalTagger&gt; {</span> <span class="s2"> ?document omds:annotations ?oldAnnotation .</span> <span class="s2"> VALUES ?document {</span> <span class="s2"> {{documents}}</span> <span class="s2"> }</span> <span class="s2"> ?oldAnnotation omds:createdAt ?createdAt .</span> <span class="s2"> ?oldAnnotation ?oldPredicate ?oldObject .</span> <span class="s2"> filter (?createdAt != ?time)</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> }</span> <span class="s2"> &quot;&quot;&quot;</span>, <span class="o">...</span><span class="err">.</span> <span class="p">}</span> <span class="p">)</span> <span class="p">{</span> <span class="k">annotationService</span> <span class="p">{</span> <span class="k">id</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span> </pre></div> </div> <p>When the annotation processes is triggered from the UI for a particular corpus, the Metadata Studio backend retrieves all documents from this corpus. It splits the documents to batches of ten and processes all batches sequentially by replacing the <code class="docutils literal notranslate"><span class="pre">{{documents}}</span></code> placeholder with the documents ids from each batch.</p> </div> </div> <div class="section" id="creating-external-services"> <span id="configuration-external-service-creation"></span><h2><a class="toc-backref" href="#what-s-in-this-document">Creating External Services</a><a class="headerlink" href="#creating-external-services" title="Permalink to this headline">¶</a></h2> <p>External services improve the annotation workflow in Metadata Studio by providing quick access to external tools that visualize the concepts from the reference dataset that you are working with. For example, if you create annotations against Wikidata, you can integrate Metadata Studio with the Wikidata Web interface. As a result, whenever you click on annotations for a concept, you will be redirected to the Wikidata page containing the information about this concept.</p> <p>To define external services, you need to insert an RDF definition for these services in GraphDB. This includes the label that this service will be referenced by in your SOML schema as well as how to compute the URL to the external service based on the Concept’s IRI. For the latter, you can make use of the <code class="docutils literal notranslate"><span class="pre">&lt;concept-iri&gt;</span></code> variable. Thus, the external service must provide a GET REST endpoint that accepts the concept’s IRI as a path or as a request parameter.</p> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">To use the External services, you must have referenced them both in the <a class="reference internal" href="#configuration-creating-objects-creating-projects"><span class="std std-ref">Project configuration</span></a> and the <a class="reference internal" href="#configuration-classes-model-custom-concept-classes"><span class="std std-ref">Concept class definition</span></a>.</p> </div> <div class="section" id="wikidata-external-service"> <span id="configuration-external-service-creation-wikidata"></span><h3><a class="toc-backref" href="#what-s-in-this-document">Wikidata external service</a><a class="headerlink" href="#wikidata-external-service" title="Permalink to this headline">¶</a></h3> <p>To resolve the URLs for Wikidata, you can use the Wikidata concept ID directly, as this points to the corresponding concept Wikidata page.</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="k">@prefix</span><span class="w"> </span><span class="nn">omds:</span><span class="w"> </span><span class="nv">&lt;http://www.ontotext.com/metadatastudio#&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="k">@prefix</span><span class="w"> </span><span class="nn">omds-ext:</span><span class="w"> </span><span class="nv">&lt;http://www.ontotext.com/metadatastudio#extService/&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nn">omds-ext:</span><span class="nt">WikidataService</span><span class="w"> </span><span class="kt">a</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">ExternalService</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">rdfs:</span><span class="nt">label</span><span class="w"> </span><span class="s">&quot;Wikidata&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">url</span><span class="w"> </span><span class="s">&quot;&lt;concept-iri&gt;&quot;</span><span class="p">.</span><span class="w"></span> </pre></div> </div> </div> <div class="section" id="now-external-service"> <span id="configuration-external-service-creation-now"></span><h3><a class="toc-backref" href="#what-s-in-this-document">NOW external service</a><a class="headerlink" href="#now-external-service" title="Permalink to this headline">¶</a></h3> <p>For integration with services such as now.ontotext.com, in which the concept information page is built by applying the concept IRI as a suffix to a URL, you can use the following RDF:</p> <div class="highlight-turtle notranslate"><div class="highlight"><pre><span></span><span class="k">@prefix</span><span class="w"> </span><span class="nn">omds:</span><span class="w"> </span><span class="nv">&lt;http://www.ontotext.com/metadatastudio#&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="k">@prefix</span><span class="w"> </span><span class="nn">omds-ext:</span><span class="w"> </span><span class="nv">&lt;http://www.ontotext.com/metadatastudio#extService/&gt;</span><span class="w"> </span><span class="p">.</span><span class="w"></span> <span class="nn">omds-ext:</span><span class="nt">NOWService</span><span class="w"> </span><span class="kt">a</span><span class="w"> </span><span class="nn">omds:</span><span class="nt">ExternalService</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">rdfs:</span><span class="nt">label</span><span class="w"> </span><span class="s">&quot;NOW&quot;</span><span class="w"> </span><span class="p">;</span><span class="w"></span> <span class="w"> </span><span class="nn">omds:</span><span class="nt">url</span><span class="w"> </span><span class="s">&quot;https://now.ontotext.com/#/concept&amp;uri=&lt;concept-iri&gt;&quot;</span><span class="p">.</span><span class="w"></span> </pre></div> </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>Download documentation</h4> <ul class="list-inline"> <li class="list-inline-item"> <a href="/omds/3.11/pdf/Metadata-Studio.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="/omds/3.11/epub/Metadata-Studio.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 2024, Ontotext. Last updated on 20 December, 2024. | <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