Skip to main content



If you come from a software background, you may be familiar with the idea of a class as defined in object-oriented programming. In some sense, we are making your data more object-oriented.

So, a class can be defined as a category of things. The best way to understand it is to go over some examples.

A class could be something like:

  • Customer
  • Country
  • Order
  • Movie

A class can be defined by a SQL table, column or SQL query. For instance, for a table customer(id, name, status), Veezoo will generate 2 classes (kb.Customer and kb.Status) and a relationship with_Status between them.


Let's see how classes are defined in VKL.

File: hitchhiker/knowledge-base/classes/Customer/class.vkl

import: [

kb {
class Customer {
name.en: "Customer"
synonym.en: "Client"
extends: onto.Customer

sql: "${ORDERS.customer_id}"
"${ORDERS.customer_firstname} || ' ' || ${ORDERS.customer_lastname}"

Let's break it down in parts:

  • name: The name of the class in the specified language (en for English). This is the primary way to refer to this concept in a question and what gets displayed to the user in an answer.
  • synonym: Synonyms specify alternative ways to refer to this concept in a question. In our example, we can say "how many customers", but also "how many clients" and it will mean the same.
  • extends: By using this optional attribute, you can point your class to a pre-defined ontology class and inherit labels and other functionalities from it. Veezoo Studio already does this automatically to the best of its knowledge.

The glue between the knowledge-base layer and the database layer is in the sql. Check its reference page to learn more about it.

There are more properties you can add to a class in VKL. Check the next pages to learn more about them.