# Shaping Archaeological Knowledge. Practical Guide to Semantic and Ontological Modelling in Archaeology with Protégé 5.6.4

Fabrizio Ducati

► To cite this version:

Fabrizio Ducati. Shaping Archaeological Knowledge. Practical Guide to Semantic and Ontological Modelling in Archaeology with Protégé 5.6.4. Doctoral. University of Bologna, Italy. 2025. hal-05456050

HAL Id: hal-05456050

https://hal.science/hal-05456050v1

Submitted on 13 Jan 2026

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Distributed under a Creative Commons CC BY-SA 4.0 - Attribution - ShareAlike - International
License
# Shaping Archaeological Knowledge

## Practical Guide to Semantic and Ontological Modelling in Archaeology with Protégé 5.6.4

By Fabrizio Ducati

This guide is a simplified adaptation of the *Pizza Ontology Practical Guide* developed by Michael DeBellis (2021). It is designed for archaeologists with no prior experience in semantic technologies, following the same workflow and conventions proposed by DeBellis.

The guide was developed as part of the *FIRS project*, funded by the European Union, to whom I express my gratitude. Special thanks go to Michael DeBellis for his support and valuable feedback throughout the modelling process.

<figure><img src="image_2.png" /></figure>

License: CC BY-SA 4.0

<figure><img src="image_3.png" /></figure>

Email: fabrizio.ducati@univ-amu.fr

<figure><img src="image_4.png" /></figure>

### Useful Resources

* M. DeBellis' Blog

* Protégé Support

### Contents

Shaping Archaeological Knowledge.................................................................................. 1

<figure><img src="image_5.png" /></figure>

Useful Notes Before Getting Started ........................................................................ 2

<figure><img src="image_6.png" /></figure>

Step 1: set-up .................................................................................................................. 2

<figure><img src="image_7.png" /></figure>

Step 2 – Create the Classes................................................................................................. 3

<figure><img src="image_8.png" /></figure>

Step 3 – Add the Properties .................................................................................................. 4

<figure><img src="image_9.png" /></figure>

How to Create Object Properties .................................................................................... 4

<figure><img src="image_10.png" /></figure>

How to Create Data Properties .......................................................................................... 5

<figure><img src="image_11.png" /></figure>

Step 4 – Creating Property Restrictions (Axioms) ................................................................. 6
<figure><img src="image_12.png" /></figure>

Step 5 - Creating Individuals / Instances .................................................................................. 7

<figure><img src="image_13.png" /></figure>

How to load data ................................................................................................................................. 8

<figure><img src="image_14.png" /></figure>

Step 7 - Defined Classes and Automated Classification ................................................................. 9

<figure><img src="image_15.png" /></figure>

Wrap-up .................................................................................................................................................. 9

<figure><img src="image_16.png" /></figure>

Glossary of Ontology Modelling Terms .................................................................................. 10

<figure><img src="image_17.png" /></figure>

## Useful Notes Before Getting Started

* ✓ Take it easy. We begin with a simple ontology: a few core concepts and essential relationships.

* ✓ Document your modelling choices with annotations.

* ✓ Run the reasoner regularly to check logical consistency.

* ✓ Save your work frequently.

<figure><img src="image_18.png" /></figure>

### Step 1: set-up

1. Edit the IRI

Edit the final part of the ontology IRI, replacing */untitled-ontology-001* with a name of your choice, for example */uqworkshop*.

2. Save the ontology

Go to File → Save, and select RDF/XML Syntax.

3. Set preferences for new entities

Go to File → Preferences → New Entities, and set the following options:

* Starts with: Active ontology IRI

* Followed by: #

* Ends with: User-supplied name

Then go to Render and select:

* Render by entity IRI short name (ID).

4. Configure the reasoner

Reasoner → Configure. This will open a dialog box with several checkboxes corresponding to the types of inferences the reasoner can perform. If not all options are selected, enable all of them.
Note: To install additional reasoners (e.g. Pellet):

File → Check for plugins. Then, Select Pellet from the list of available plugins and click Install. Once the installation is complete, you will be notified that the changes will take effect the next time you restart Protégé.

### 5 Add a comment to the ontology

Go to Active Ontology and add an rdfs:comment annotation describing the purpose and scope of the ontology.

<figure><img src="image_19.png" /></figure>

## Step 2 – Create the Classes

Two methods:

### A. Using dedicated buttons

* **Add Subclass** (child class)

* **Add Sibling Class** (sibling class)

<figure><img src="image_20.png" /></figure>

Use a consistent naming convention (e.g., *CamelCase* or *snake_case*).

### B. Automatic generation

**Tools → Create Class Hierarchy**

Copy and paste the class hierarchy from the .txt file in the shared folder.

<figure><img src="image_21.png" /></figure>

After creating the hierarchy → **run the reasoner** (e.g., Pellet).

**Note: Primitive and Defined Classes**

* **Primitive classes**: classes defined solely by their *necessary* conditions. If something is a member of this class (or any of its subclasses), it must satisfy these conditions. The classes you have created are all primitive classes.

* **Defined classes**: classes defined by both *necessary and sufficient* conditions. We will introduce these later.
<figure><img src="image_22.png" /><figcaption>Figure 1. Representation of classes and subclasses in your ontology</figcaption></figure>

<figure><img src="image_23.png" /></figure>

## Step 3 – Add the Properties

In OWL, properties define **binary relations**. There are three main types:

<table><thead><tr><td>Type of property</td><td>Used to</td><td>Example</td></tr></thead><tbody><tr><td>Object Properties</td><td>Connect two individuals (domain and range are classes).</td><td>ArtefactIdentifier → hasDiscoveryLayer → Discovery Layer</td></tr><tr><td>Data Properties</td><td>Connect a class as domain to a simple datatype.</td><td>Discovery Layer → hasExcavationYear → xsd:integer</td></tr><tr><td>Annotation Properties</td><td>Add metadata.</td><td>Descriptions, sources, labels, links, etc.</td></tr></tbody></table>

<figure><img src="image_24.png" /></figure>

**Important**

* Only **individuals** can have values for Object and Data Properties.

* **Any entity** can have Annotation Properties.

<figure><img src="image_25.png" /></figure>

## How to Create Object Properties

Open **Object Properties** → use:

* **+** Add Subproperty / Add Sibling Property, or

* **Tools → Create Object Property Hierarchy**
Copy and paste the object property hierarchy from the .txt file in the shared folder.

## 1. Set Domain and Range

* **Domain:** classes for which this property may apply.

* **Range:** classes that may serve as the value of this property.

<figure><img src="image_26.png" /></figure>

To assign the domain:

**Description:** → **Domains (intersection)** → **+** → **select class from the Class Hierarchy.**

## 2. Define any inverse property (using the Inverse Of + button)

**Archaeological example:**

If Object1 hasDiscoveryLayer Layer1, then Layer1 isDiscoveryLayerOf Object1.

<figure><img src="image_27.png" /></figure>

**Note on multiple domains/ranges**

If more than one class is inserted as domain or range, OWL interprets these as an **intersection**, not a **union**. To express a union, use the keyword **or**.

A detailed table of domain–property–range restrictions follows. Reproduce this structure in your ontology.

<table><thead><tr><td>Object Property</td><td>Inverse</td><td>Domain</td><td>Range</td></tr></thead><tbody><tr><td>hasCeramicClass</td><td>Yes</td><td>ArtefactIdentifier or CeramicType</td><td>CeramicClass</td></tr><tr><td>hasCeramicShape</td><td>Yes</td><td>ArtefactIdentifier or CeramicType or CeramicClass</td><td>CeramicShape</td></tr><tr><td>hasCeramicType</td><td>Yes</td><td>ArtefactIdentifier or CeramicClass</td><td>CeramicType</td></tr><tr><td>hasDiscoveryArea</td><td>Yes</td><td>ArtefactIdentifier</td><td>DiscoveryArea</td></tr><tr><td>hasDiscoveryLayer</td><td>Yes</td><td>ArtefactIdentifier</td><td>DiscoveryLayer</td></tr><tr><td>hasDiscoverySite</td><td>Yes</td><td>ArtefactIdentifier</td><td>DiscoverySite</td></tr><tr><td>hasDiscoverySpace</td><td>Yes</td><td>ArtefactIdentifier</td><td>DiscoverySpace</td></tr><tr><td>hasProductionPlace</td><td>Yes</td><td>ArtefactIdentifier or CeramicClass or CeramicType</td><td>ProductionPlace</td></tr><tr><td>hasTechnology</td><td>Yes</td><td>CeramicShape</td><td>Technology</td></tr><tr><td>isPartOf</td><td>Yes</td><td>DiscoveryPlace</td><td>DiscoveryPlace</td></tr></tbody></table>

<figure><img src="image_28.png" /></figure>

## How to Create Data Properties

OWL allows properties whose range is a simple datatype (e.g., string, integer). Datatype properties can be created in the **Data Properties** view.

1. Open **Data Properties** → select **owl:topDataProperty**. Then click **Add Subproperty**, give the new property a name → OK.

* Click the (+) next to *Domains* → select the class.

* Click the (+) next to *Ranges* → choose **Built-in Datatypes**.

2. **Tools → Create Object Property Hierarchy**
Copy and paste the data property hierarchy from the .txt file in the shared folder.

<figure><img src="image_29.png" /></figure>

## Step 4 – Creating Property Restrictions (Axioms)

Restrictions describe classes: a class contains all individuals that satisfy the restriction.

### Types of Restrictions

#### 1 Quantifiers

<table><thead><tr><td>Type</td><td>Meaning</td></tr></thead><tbody><tr><td>some (Existential)</td><td>at least one relationship via that property</td></tr><tr><td>only (Universal)</td><td>only relationships with individuals in a given class</td></tr></tbody></table>

#### 2 Cardinality

Specifies how many individuals must/may be connected through a property.

#### 3 hasValue

Specifies a specific mandatory value for a property.

<figure><img src="image_30.png" /></figure>

In this workshop, we mainly work with existential restrictions (some).

<figure><img src="image_31.png" /><figcaption>Figure 2. Ontology mapping with properties and restrictions</figcaption></figure>

<figure><img src="image_32.png" /></figure>

Restrictions for datatype properties follow the same workflow as object properties: Class → *SubClassOf* → (+) → choose **Data Restriction**.

<table><thead><tr><td>Domain</td><td>Data property</td><td>Range</td></tr></thead><tbody><tr><td>ArtefactIdentifier</td><td>hasPreservedPart (some)</td><td>xsd:string</td></tr><tr><td>ArtefactIdentifier</td><td>hasSpecificWorkshop (some)</td><td>xsd:string</td></tr><tr><td>DiscoveryLayer</td><td>hasExcavationLayer (some)</td><td>xsd:integer</td></tr></tbody></table>
<figure><img src="image_33.png" /></figure>

Step 5 – Creating Individuals / Instances

Individuals represent specific objects within the domain of interest. Instances are individual that are
classified as members of a given class.

1. Navigate to **Entities** → **Individuals**.

2. Click the (+) **Add** icon in the *Individuals* pane. Create four individuals and assign each of them to the appropriate class:

* **Object1** — *Types*: ArtefactIdentifier

* **AfricanAmphora** — *Types*: CeramicClass

* **Africa** — *Types*: ProductionPlace

* **Layer1** — *Types*: DiscoveryLayer

You may now define object and data properties for each individual.

1. Under **Object Property Assertions**, create the relevant assertions. Two fields will be displayed:

   * **left**: the property name

   * **right**: the value (another individual)

* **left**: the property name

* **right**: the value (another individual)

2. Add the following assertions:

* **Object1**

* `hasDiscoveryLayer` → Layer1

* `hasCeramicClass` → AfricanAmphora

* **AfricanAmphora**

* `hasProductionPlace` → Africa

Under **Data Property Assertions**, add datatype values using the same workflow:

* **Object1**

* `hasPreservedPart` → Rim

* `hasSpecificWorkshop` → Carthage

* **Layer1**

* `hasExcavationYear` → 2023

<figure><img src="image_34.png" /></figure>

Remember to specify the correct datatype each time. This is different from defining the datatype of the property itself; here, you are specifying the datatype of a particular value.

<figure><img src="image_35.png" /></figure>

Step 6 – Importing Data from an Excel Spreadsheet
Data are often imported from spreadsheets, relational databases, or other external sources. Several methods and tools allow data-to-ontology mapping (Python, OpenRefine, Ontop, Cellfie). Here we use the plug-in [Cellfie](https://www cellfie com). Cellfie is based on **Manchester syntax** and allows writing rules that map Excel tables into RDF/OWL triples.

<figure><img src="image_36.png" /></figure>

## How to load data

### Importing axioms from an Excel workbook

Go to **Tools → Create axioms from Excel workbook**. Then, select the .xls file from the shared folder. Create a new rule for the sheet **FindsInformation**. Under **Transformation rules**, click **Add**, then configure the settings:

* **Start column:** A

* **End column:** +

* **Start row:** 2

* **End row:** +

* Add a comment if needed.

In the text box below, type your rule. Examples of rules are provided:

#### 1. Class Assertion

Individual: @A*

Types: ArtefactIdentifier

This rule creates an individual for each value in column A and asserts that each individual is an instance of the class ArtefactIdentifier. The cell reference notation @A* consists of three elements:

* @

* the column letter

* the row number — or * when the rule applies to all rows in that column

#### 2. Object and Data Properties Assertions

Individual: @A*

Types: ArtefactIdentifier

Facts: hasCeramicClass @B*,
hasCeramicType @C*,
hasCeramicShape @D*,
hasPreservedPart @H* (xsd:string)

This pattern assigns object and data property values to each individual generated from column A.

* Columns B, C, and D supply the objects for the respective Object Properties.

* Column H provides a literal value for the data property *hasPreservedPart*.
<figure><img src="image_37.png" /></figure>

Important note: if a rule refers to a named entity (for example, *CeramicClass*), that entity must already exist in the ontology. If it does not, Cellfie will return an *entity not found* error.

<figure><img src="image_38.png" /></figure>

## Step 7 – Defined Classes and Automated Classification

A **defined class** is specified by both **necessary** and **sufficient** conditions. When the reasoner encounters an individual that satisfies all of these conditions, it automatically infers that the individual is an instance of that class. In other words, if an individual fulfils all the stated conditions, it must belong to that class. This feature is extremely useful for the automated classification of information.
Let's look at two examples:

### Example 1

We want to create a subclass of **ArtefactIdentifier** that groups together all diagnostic artefacts (i.e. rims) that securely originate from Africa. Let's call this class **AfricanDiagnosticArtefact**.

1. In the *Description* tab, click the **Equivalent To** (+) button.

2. In the Class Expression Editor, type:

ArtefactIdentifier and hasProductionPlace value Africa and hasPreservedPart value "Rim"

The three horizontal white lines shown next to AfricanDiagnosticArtefact indicate that this is a **defined class**.

### Example 2

We want to group all layers excavated after 1995. The workflow is the same.

1. Create a subclass of **DiscoveryLayer** and name it **SelectedLayer**.

2. In the *Description* tab, click the **Equivalent To** (+) button, then in the Class Expression Editor type:

DiscoveryLayer and hasExcavationYear some xsd:integer[> 1995]

<figure><img src="image_39.png" /></figure>

## Wrap-up

### Congratulations!

You have successfully modelled a heavyweight ontology for ceramic artefacts from excavated contexts, complete with its classes, properties, and axioms. You have also mapped tabular data into RDF/OWL triples and imported them into Protégé. You now possess the skills needed to understand and further explore ontologies and the wider world of semantic technologies independently.

Thank you for participating, and see you next time!
<figure><img src="image_40.png" /></figure>

Glossary of Ontology Modelling Terms

<table><thead><tr><td>Term</td><td>Definition</td><td>Reference</td></tr></thead><tbody><tr><td>Annotation Property</td><td>Used to provide a user-friendly name or metadata for an entity (e.g., rdfs:label).</td><td>DeBellis 2021</td></tr><tr><td>Class</td><td>A class in OWL is a set; conceptually equivalent to a concept in knowledge representation.</td><td>DeBellis 2021; Niccolucci et al. 2015</td></tr><tr><td>Defined Classes</td><td>Classes defined by necessary and sufficient conditions. If an individual satisfies all conditions, the reasoner infers it must be a member of this class.</td><td>DeBellis 2021</td></tr><tr><td>Domain</td><td>The set of all objects for which a given property may be asserted.</td><td>DeBellis 2021</td></tr><tr><td>Entity</td><td>Any class, individual, object property, data property, annotation property, or rule in Protégé.</td><td>DeBellis 2021</td></tr><tr><td>eXtensible Markup Language (XML)</td><td>A markup language and file format defining rules for encoding human- and machine-readable documents.</td><td>Wikipedia</td></tr><tr><td>HyperText Markup Language (HTML)</td><td>The standard markup language for content displayed in web browsers; defines structure and formatting of web pages.</td><td>Wikipedia</td></tr><tr><td>Individuals</td><td>Specific objects or entities within the domain of interest.</td><td>DeBellis 2021</td></tr><tr><td>Instances</td><td>Individuals that are members of a class; identifiable manifestations of an underlying concept.</td><td>Niccolucci et al. 2015</td></tr><tr><td>Internationalized Resource Identifier (IRI)</td><td>An extension of the URI standard allowing a broader set of Unicode characters.</td><td>Wikipedia</td></tr><tr><td>Ontology</td><td>A structured representation of knowledge in a domain, defining concepts and the relationships between them.</td><td>DeBellis 2021</td></tr><tr><td>Primitive Classes</td><td>Classes defined only by necessary (not sufficient) conditions. Any individual in the class must satisfy these conditions.</td><td>DeBellis 2021</td></tr></tbody></table>
<table><tr><td>Properties</td><td>Binary relations in OWL; predicates that express relationships or constraints.</td><td>DeBellis 2021; Niccolucci et al. 2015</td></tr><tr><td>Range</td><td>The set of all objects that may serve as the value of a property.</td><td>DeBellis 2021</td></tr><tr><td>Resource Description Framework (RDF)</td><td>A framework for encoding knowledge as a directed graph of triple statements.</td><td>Wikipedia</td></tr><tr><td>Resource Description Framework Schema (RDFS)</td><td>An extension of RDF providing basic classes and properties for building simple ontologies.</td><td>Wikipedia</td></tr><tr><td>SPARQL</td><td>A query language for retrieving and manipulating RDF data.</td><td>Wikipedia</td></tr><tr><td>Taxonomy</td><td>A hierarchical classification system in which classes or concepts are organised from general to specific (e.g., Artefact → CeramicArtefact → Amphora).</td><td>Wikipedia</td></tr><tr><td>Triple Statement</td><td>The basic unit of RDF, consisting of subject – predicate – object, representing a single fact in a graph.</td><td>Wikipedia</td></tr><tr><td>Uniform Resource Identifier (URI)</td><td>A unique character sequence identifying an abstract or physical resource.</td><td>Wikipedia</td></tr><tr><td>Uniform Resource Locator (URL)</td><td>A type of URI specifying the location of a resource on a network and how to retrieve it.</td><td>Wikipedia</td></tr><tr><td>Web Ontology Language (OWL)</td><td>A family of knowledge representation languages used to define and structure ontologies.</td><td>Wikipedia</td></tr><tr><td>Property Restrictions</td><td>Logical axioms used to describe classes by specifying required relationships, such as existential (some), universal (only), cardinality, or hasValue restrictions.</td><td>DeBellis 2021</td></tr></table>