<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Daniēls Zeps</title>
    <description>The latest articles on Forem by Daniēls Zeps (@danielszeps).</description>
    <link>https://forem.com/danielszeps</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3803803%2F2a9ef911-6798-408f-8ad9-0c6405bf636b.png</url>
      <title>Forem: Daniēls Zeps</title>
      <link>https://forem.com/danielszeps</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/danielszeps"/>
    <language>en</language>
    <item>
      <title>Audit System - NewStarT (Custom OWL)</title>
      <dc:creator>Daniēls Zeps</dc:creator>
      <pubDate>Thu, 02 Apr 2026 15:28:56 +0000</pubDate>
      <link>https://forem.com/danielszeps/audit-system-newstart-custom-owl-1o1m</link>
      <guid>https://forem.com/danielszeps/audit-system-newstart-custom-owl-1o1m</guid>
      <description>&lt;p&gt;&lt;strong&gt;NewStarT Audit&lt;/strong&gt; is an open-source no-coding shell of a rule-based expert system developed within the project NewStart (lzp-2022/1-0350) focused to enhance the competition of regional tourism products. The system is made using Django framework and is designed to provide an audit of products/ services to identify their correct category and quality level.  Data can be imported using OWL ontology or added manually using Django admin template. The shell is developed as a Django app and can be integrated into other Django projects. The key features of the system are depicted in another article &lt;a href="https://medium.com/@DanielsZeps/newstart-audit-system-360fcc5630b6" rel="noopener noreferrer"&gt;https://medium.com/@DanielsZeps/newstart-audit-system-360fcc5630b6&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This article is a setup guide for developers. The source code of the project, is available on GitHub and Docker.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub (Apache 2.0): &lt;a href="https://github.com/flpp20191/NewStarT_Audit" rel="noopener noreferrer"&gt;https://github.com/flpp20191/NewStarT_Audit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Docker image: &lt;a href="https://hub.docker.com/r/flpp20191/new-start-audit" rel="noopener noreferrer"&gt;https://hub.docker.com/r/flpp20191/new-start-audit&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article covers the following subjects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting up the project using an example with tourism product assessment ontology;&lt;/li&gt;
&lt;li&gt;Creating your own custom ontology.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  1. Setting up the system
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1.1. Setting up with Docker
&lt;/h3&gt;

&lt;p&gt;System image is available on Docker. It has no external connections and sets up automatically once the image is ran.&lt;br&gt;
&lt;a href="https://hub.docker.com/r/flpp20191/new-start-audit" rel="noopener noreferrer"&gt;https://hub.docker.com/r/flpp20191/new-start-audit&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1.2. Local setup
&lt;/h3&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;Django version: 5.2.11+&lt;/li&gt;
&lt;li&gt;pip&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  1.3. Setting up using GitHub repository
&lt;/h3&gt;

&lt;p&gt;The first step is downloading the project from GitHub repository using git or downloading the .zip archive. After that you need to go to the root folder with manage.py file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/flpp20191/NewStarT_Audit
&lt;span class="nb"&gt;cd &lt;/span&gt;NewStarT_Audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to set up virtual environment, the information is available on GitHub.&lt;br&gt;
After this you need to install dependencies, by running pip install -r requirements.txt, which will install the necessary Python packages.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.4. System environment variables
&lt;/h3&gt;

&lt;p&gt;To set up system environment variables you must run the next command, which will copy predefined variables to root.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# On maxOS/Linux&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;root
&lt;span class="nb"&gt;cp&lt;/span&gt; ./Example/.env.example .env
&lt;span class="c"&gt;# On Windows&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;root
copy ./Example/.env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are planning to run the shell on a public server, you should generate a new SECRET_KEY and replace it in the .env file. By default the shell uses Sqlite3 database. If you are running it locally, it will work well enough, but you can change the database in the .env file to use your preferred database, for example MySQL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;django.core.management.utils&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;get_random_secret_key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;get_random_secret_key&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The previous Python code will output a secure key that you should copy and paste into your .env file under the SECRET_KEY variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;placeholder_generated_secret_key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Users can choose to recalculate their score if changes have been made to questions/conditions by admin. To prevent overloading DB, users can do it once every 5 minutes. Admin can change this time in system environment variables by changing SCORE_UPDATE_DELAY.&lt;br&gt;
If you are adding this Django app to an existing project, you might need to remake the migration files, because they might not be compatible with your current project database.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.5. Running the project
&lt;/h3&gt;

&lt;p&gt;To make sure that the project is fully set up, you need to run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;python manage.py setup
python manage.py createsuperuser
python manage.py runserver
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands will run the initial setup of the app, create a superuser account and run the server.&lt;br&gt;
Command "runserver" will start the app on a localhost, which you can access by &lt;a href="http://127.0.0.1:8000/" rel="noopener noreferrer"&gt;http://127.0.0.1:8000/&lt;/a&gt;. You can use the login information you input when you ran the "createsuperuser" command to login into the system. This will let you access a blank project with no data. &lt;/p&gt;
&lt;h3&gt;
  
  
  1.6. Data import (using UI)
&lt;/h3&gt;

&lt;p&gt;After login into the system as a superuser, you can go to "OWL management", to upload an OWL file.&lt;br&gt;
You can use "Example/NewStarT.owl" and "Example/NewStarT.yml" to test out the data adding on tourism data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw6cctnd0xql2ggje6ivm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw6cctnd0xql2ggje6ivm.png" alt="OWL file upload" width="800" height="316"&gt;&lt;/a&gt;&lt;br&gt;
This also will allow you to upload a costume ontology file. If you used "Example/template.owl" as the base for your ontologies, you can continue with default configurations. Making your own ontology, is described later in the article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2260b34110vlcjw7trb9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2260b34110vlcjw7trb9.png" alt="Default upload configurations" width="800" height="506"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;LANGUAGE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;en'&lt;/span&gt; &lt;span class="c1"&gt;#Language tag used for labels&lt;/span&gt;
&lt;span class="na"&gt;HAS_CATEGORY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#Object property that point to category&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasCategory&lt;/span&gt;
&lt;span class="s"&gt;HAS_GROUP&lt;/span&gt; &lt;span class="c1"&gt;#Grouping object property&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasGroup&lt;/span&gt;
&lt;span class="s"&gt;HAS_HINT_TEXT&lt;/span&gt; &lt;span class="c1"&gt;#Hint text&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasMesurement&lt;/span&gt;
&lt;span class="na"&gt;HAS_QUESTION_TYPE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="s"&gt;QUESTION_TYPE&lt;/span&gt; &lt;span class="c1"&gt;#Question types (INTERVAL/LIKERT)&lt;/span&gt;
  &lt;span class="s"&gt;INTERVAL&lt;/span&gt; &lt;span class="c1"&gt;#If questions have interval answer types&lt;/span&gt;
    &lt;span class="s"&gt;MAX&lt;/span&gt; &lt;span class="c1"&gt;#Max allowed interval value&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasMaxAllowedValue&lt;/span&gt;
    &lt;span class="s"&gt;MIN&lt;/span&gt; &lt;span class="c1"&gt;#Min allowed interval value&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasMinAllowedValue&lt;/span&gt;
  &lt;span class="na"&gt;LIKERT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;#If questions have Likert answer types&lt;/span&gt;
    &lt;span class="c1"&gt;#Anwer that should be selected as Likert answer&lt;/span&gt;
    &lt;span class="na"&gt;LIKERT_ANSWER_PROPERTY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasExpectedAnswer&lt;/span&gt;
    &lt;span class="c1"&gt;#List of choices for a Likert question&lt;/span&gt;
    &lt;span class="na"&gt;LIKERT_CHOICES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasAnswerOptions&lt;/span&gt;
    &lt;span class="c1"&gt;#String used to split up choices&lt;/span&gt;
    &lt;span class="na"&gt;SEPERATOR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;

            &lt;span class="s"&gt;'&lt;/span&gt;
  &lt;span class="c1"&gt;# Highlighted questions&lt;/span&gt;
  &lt;span class="na"&gt;MANDATORY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#isMandatory&lt;/span&gt;
  &lt;span class="c1"&gt;# Answer type indicator (Yes/No, Likert, Interval)&lt;/span&gt;
  &lt;span class="na"&gt;PROPERTIES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# Class objects that indicate an answer type&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#hasAnswerType&lt;/span&gt;
  &lt;span class="na"&gt;TYPES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Class IRI&lt;/span&gt;
    &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#interval&lt;/span&gt;
    &lt;span class="na"&gt;likert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#likert&lt;/span&gt;
    &lt;span class="na"&gt;yes_no&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;https://newstart.rta.lv#yesno&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.7. Data import (using admin CMD)
&lt;/h3&gt;

&lt;p&gt;System admin/superuser can upload an existing OWL file into the system, by following prompts in the CMD. The system lets the user to determine what properties correlate to which DB constraints, and imports data based on this information. The system comes with an OWL file example from the NewStarT project and a OWL template file for a custom ontology construction.&lt;br&gt;
The OWL file only requires Category-&amp;gt;Question restraint. All other functions for the audit are optional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;hasCategory&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SomeCategory&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can run the command to add the OWL file from the NewStarT Audit project to test out the system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python manage.py uploadOwl &lt;span class="nt"&gt;--filepath&lt;/span&gt; Example/NewStarT.owl &lt;span class="nt"&gt;--language&lt;/span&gt; en &lt;span class="nt"&gt;--make_config&lt;/span&gt; &lt;span class="nt"&gt;--config_filename&lt;/span&gt; Example/conf_output.yml &lt;span class="nt"&gt;--conf&lt;/span&gt; Example/conf.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcw15ox3ibr9oqzvw127.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcw15ox3ibr9oqzvw127.png" alt="OWL import result using Example data" width="544" height="273"&gt;&lt;/a&gt;&lt;br&gt;
Data that is required for recommendation system to function are: Category, Question and Subtheme. Condition is an object property that connects, questions to Category.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo6m9ralqqb1zdy1gyoq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmo6m9ralqqb1zdy1gyoq.png" alt="Data structure" width="689" height="331"&gt;&lt;/a&gt;&lt;br&gt;
In case data structure gets updated, the system uses IRIs to store OWL references, so the file can be imported again and only the new OWL entries will be modified. If an IRI is not present in the OWL file, it will be left untouched.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk81t8rd3i2qi0eu6294n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk81t8rd3i2qi0eu6294n.png" alt="OWL file example" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  2. Creating your custom ontology
&lt;/h1&gt;
&lt;h3&gt;
  
  
  2.1. Creating an ontology using OWL
&lt;/h3&gt;

&lt;p&gt;To create your custom ontology, you don't need to use specific IRIs. You have to have simply a consistent relationship structure.&lt;br&gt;
The Question and Category hierarchy will be created using hierarchy presented in the OWL file. A question can appear in multiple questionnaires depending on how your hierarchy is organised.&lt;br&gt;
The database data will be created based on your ontology and upload configurations you used.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw81gohvo8kpx6xvuru1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw81gohvo8kpx6xvuru1e.png" alt="Category hierarchy in OWL compare to Audit" width="800" height="259"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasttjv2j1bn647oi4vxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasttjv2j1bn647oi4vxg.png" alt="Category hierarchy in OWL compare to Audit" width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.2. Adding relationships
&lt;/h3&gt;

&lt;p&gt;You have to add a relationship from question to category, to show what category a question indicates. It has to be an object property and it should follow this syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;hasCategory&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;SomeCategory&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, if food business locally sources their food, it is more likely to be a "Home café".&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6q08u30se0c13zx7spyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6q08u30se0c13zx7spyq.png" alt="hasCategory relationship example" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.3. Specifying question types
&lt;/h3&gt;

&lt;p&gt;By default it is assumed that a question is a "Yes/No" question, but you can specify what question type is expected for a specific question.&lt;br&gt;
To do that you need to create Classes for each question type (already present in "template.owl"):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes/No;&lt;/li&gt;
&lt;li&gt;Likert;&lt;/li&gt;
&lt;li&gt;Interval.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And use an object property to indicate question type. For example in the:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;hasExpectedAnswerType&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;YesNo&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is required, because otherwise system has no way of knowing, how a question should be imported.&lt;br&gt;
You can add "Not" to the relationship, to indicate a inverse relationship to a category.&lt;/p&gt;
&lt;h5&gt;
  
  
  LIKERT - requirements
&lt;/h5&gt;

&lt;p&gt;To use Likert questions, two additional relationships need to be added.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Has answer options (Data Property)&lt;/li&gt;
&lt;li&gt;Has expected answer (Data Property)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relationship "hasAnswerOptions" indicates, what will appear in the Liker scale dropdown. Relationship "expectedAnswer" is the threshold that a user has to select to match the result. In this example, in a tier 3 camping site at least 80% of trailers have to have access to electricity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41mfag0l71brf0no474v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F41mfag0l71brf0no474v.png" alt="Likert choices" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;
  
  
  INTERVAL- requirements
&lt;/h5&gt;

&lt;p&gt;To use Interval questions, two additional relationships need to be added.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Has min answer(Data Property)&lt;/li&gt;
&lt;li&gt;Has max answer(Data Property)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Min answer, indicates minimal acceptable answer. Max answer indicates max inclusive answer.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0i51zcj1u8dyiore8a15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0i51zcj1u8dyiore8a15.png" alt="Interval example" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.4. Additional properties
&lt;/h3&gt;

&lt;p&gt;Since the NewStarT system needed some of these utility properties, they have been also added to this Audit system.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hint text (object property)&lt;/em&gt;&lt;br&gt;
Shows expected answer format, for example "meters" or "minutes".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;hasHintText&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Meters&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0i51zcj1u8dyiore8a15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0i51zcj1u8dyiore8a15.png" alt="Hint text example" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Group (object property)&lt;/em&gt;&lt;br&gt;
Groups questions in block, to improve readability. For example "By cooking technology" in Canteen characteristics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;hasSpecialization&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"By target group"&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh68mavp2oy1rg02xkz7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh68mavp2oy1rg02xkz7f.png" alt="Group example" width="800" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Highlighting (data property)&lt;/em&gt;&lt;br&gt;
Indicates answer scores for questions that are more important.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Class&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;isMandatory&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlwh0l5irysg9704z95x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlwh0l5irysg9704z95x.png" alt="Score higlighting" width="628" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any follow up questions reach out to us through our GitHub page: &lt;a href="https://github.com/flpp20191/NewStarT_Audit" rel="noopener noreferrer"&gt;https://github.com/flpp20191/NewStarT_Audit&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Suggestions
&lt;/h1&gt;

&lt;p&gt;When making a custom OWL file, if you are new to using OWL, we advise you to use WebProtégé, since its UI is simpler and less overwhelming.&lt;br&gt;
Advanced users should use &lt;a href="https://protege.stanford.edu/" rel="noopener noreferrer"&gt;https://protege.stanford.edu/&lt;/a&gt;. It lets you use more of the systems functions, which are not present in the web version.&lt;/p&gt;

&lt;h1&gt;
  
  
  Acknowledgement
&lt;/h1&gt;

&lt;p&gt;This research was funded by the "Fundamental and Applied Research (FLPP)", project "Digital Twin to Promote the Development of Tourism Competitiveness and Complementarity: the Use Case in Latgale region", project No. lzp-2022/1–0350&lt;/p&gt;

</description>
      <category>django</category>
      <category>opensource</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
