class
Definition
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.
Usage
Let's see how classes are defined in VKL.
File: hitchhiker/knowledge-base/classes/Customer/class.vkl
import: [
    db.postgres.movie_db.public.ORDERS
]
kb {
    class Customer {
        name.en: "Customer"     
        synonym.en: "Client"
        extends: onto.Customer
        
        sql: "${ORDERS.customer_id}"
        name_sql.en:
          "${ORDERS.customer_firstname} || ' ' || ${ORDERS.customer_lastname}"
    }
}
Let's break it down in parts:
- name: The name of the class in the specified language (enfor 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.