🎓 ExA-AToW Ontology Visual Guide

Understanding Classes, Properties, Instances & Restrictions

📦 The 4 Building Blocks

📋
Classes
What: Concepts or "types of things"
Think: Categories, templates
Example: Processor, GPU, Memory
Real world:
"Processor" is a CLASS
(like "Car" is a type of vehicle)
🔗
Properties
What: Relationships or attributes
Think: Connections, characteristics
Types: ObjectProperty, DatatypeProperty, AnnotationProperty
Real world:
"hasProcessor" connects
ComputeNode → Processor
Instances
What: Specific, named examples
Think: Concrete things that exist
Example: OAuth2, SLURM, MPI
Real world:
"OAuth2" is an INSTANCE
of AuthenticationProtocol
⚖️
Restrictions
What: Rules for measurements
Think: "Must have value + unit"
Example: 450 mm² (value + unit)
Real world:
DieSize needs BOTH:
hasValue: 450
hasUnit: "mm²"

🔗 Understanding Property Types

🔗
ObjectProperty
Connects two classes together.
Example:
Job → executesOn → ComputeNode

Processor → hasDieSize → DieSize
📊
DatatypeProperty
Connects a class to a simple value
Example:
Processor → hasCoreCount → 16

Job → hasDuration → 3600
🏷
AnnotationProperty
Adds metadata or documentation (non-semantic). Create it when you need project-specific metadata that isn't covered by standard (label, comments) vocabularies.
Example:
SomeMeasurement → measuredBy → SomePerson

SomeSoftware → maintainedBy → SomePerson

🎨 Complete Example: Processor with Die Size

Example Die Size
💡 Key Point: DieSize is a CLASS that requires BOTH hasValue (a decimal) and hasUnit (either mm² or cm2). This is called a "restriction" - it enforces that measurements are complet.

💻 JSON Code Examples

1️⃣ Defining Classes

Extract of file: files/sub_HPC_classes.json

[
 {
  "id": "ComputeNode",
  "parent_class": "HPCResource",
  "pref_label": {
     "en": "Node",
     "fr": "Noeud"
   },
  "comment": {
     "en": "A physical or virtual server that executes computational jobs within a partition.",
     "fr": "Un serveur physique ou virtuel qui exécute des tâches de calcul au sein d'une partition."
   }
  "link_html": "https://wiki.external.link",
  "equivalent": "https://link.to.ontology#Concept",
  }
 }
]

2️⃣ Defining Properties

File: files/properties_HPC.json

[
 {
  "id": "hasDieSize",
   "property_type": "ObjectProperty",
  "domain": "Processor",
  "range": "DieSize",
  "pref_label": {
     "en": "has die size",
     "fr": "a taille de puce"
   }
  "comment": {
     "en": "Relates a processor to its die size measurement."
   }
 }
]

3️⃣ Adding Restrictions

Some classes (i.e. physical characteristic) have Units and Values. Add hasUnit and hasValue restrictions to those classes. File to be updated: files/add_restrictions_hasValue_hasUnit.json

Example of a class (DieSize) that hasUnit (either mm2 or cm2 -> give a list with possible values with enumeration) and hasValue (a decimal, if all values possibles, then use all_values_from).
[
 {
   "class_name": "DieSize",
   "restrictions":[
    {
      "property_name": "hasUnit",
      "enumeration": ["mm2","cm2"],
      "comment":{
        "en": "Allowed units for die size",
        "fr": "Unités autorisées pour la taille de puce"
       }
    },
    {
      "property_name": "hasValue",
      "all_values_from": "xsd:decimal",
      "comment":{
        "en": "Numeric value of the die size",
        "fr": "Valeur numérique de la taille de puce"
       }
     }
   ]
 }
]

4️⃣ Creating Instances

File: files/instances_***.json

[
 {
  "instance_name": "diesize_a100",
  "class_type": "DieSize",
  "pref_label": {
    "en": "Diesize A100"
   },
  "properties": {
    "hasValue": "826",
    "hasUnit": "mm2",
    }
  "pref_label": {
    "en": "Die size for A100 GPU"
   }
 },
 {
  "instance_name": "nvidia_a100",
  "class_type": "GPU",
  "pref_label": {
    "en": "NVIDIA A100"
   },
  "properties": {
    "hasDieSize": "diesize_a100"
   }
  "pref_label": {
    "en": "GPU NVIDIA A100"
   }
 }
]

🤔 Decision Tree: What Should I Create?

What do I need? A concept or type of thing? → Create a CLASS A relationship or attribute? → Create a PROPERTY A specific, named example? → Create an INSTANCE Links two classes? → ObjectProperty Links to a value? → DatatypeProperty Does it need value + unit? → Add RESTRICTION

ExA-AToW Ontology Project | NumPEX PEPR Initiative

For questions, contact the ontology coordinator or open a GitHub issue