top of page
  • Writer's pictureMichael DeBellis

New Protégé Pizza Tutorial

Updated: Sep 11

I've written a new version of the Pizza Tutorial for Protégé . The long version of the Pizza tutorial has had minor inconsistencies with the latest Protégé UI for quite some time. The differences were fairly trivial but since a tutorial should be as clear as possible they could make things difficult for some users, especially those not already familiar with object-oriented modeling. I've addressed those differences I've also made many changes based on the kinds of issues I've seen new users grapple with. Finally, I've added new sections for tools like SWRL, SPARQL, and SHACL.

Note: Today (10/8/2021) I've replaced the previous version with a newer version, version 3.2 This version has some minor corrections based on feedback from various users.

The latest tutorial can be found here: There is also a link in the tutorial to the following file: This is a solution to the initial tutorial development and also has some additional individuals and data properties which can be used to test the new parts of the tutorial that deal with SWRL, SPARQL, and SHACL.

I've also added a new tutorial ontology and guide in a recent post: The People_Ontology. This ontology is an addendum for an article I'm writing that hasn't been published yet. It has some overlap with the Pizza tutorial but also some new work such as more detail on properties and a Linked Data SPARQL query developed with the help of Franz Inc.

A new addition: see this blog post for information about a YouTube playlist for Protégé users created by Xiaoqi Zhao

As various users have used the tutorial, they've discovered some errors. I'm going to release a new version of the tutorial fairly soon, I think by the end of this year (2023) but in the mean time, here are some issues you should be aware of regarding the current version. Special thanks to Xiaoqi Zhao who found most of these:

8/29/2023 Edit: Two updates:

1) I think I put this in the tutorial somewhere but if I did, it is something that people often miss: If you don't see the appropriate inferences, especially in the SWRL section make sure you have loaded the Pellet reasoner plugin and make sure you do Reasoner>Configure and check all the boxes. By default many of them are not checked because for large ontologies they can make the reasoner slow but for the tutorial and most ontologies created by new users reasoner performance is just fine with all possible inferencing turned on. IMO, it is good to start with that so you can see the full power of the reasoner, then scale it back if and whey you get into medium (thousands of entities) to large (millions of triples) ontologies where performance may become an issue. Thanks to Xiaoqi Zhao for pointing this out.

2) In this tutorial and my older SWRL tutorial I only mention using the SWRLTab. The SWRLTab is great for many use cases but it only can reference entities by their IRIs. For ontologies such as those in the OBO foundry that have codes for IRIs you need the Rules view. In a recent post, I've created a mini-tutorial on how to setup your own custom Rules Tab for editing SWRL rules with the Rules view. I hope this will be helpful both for those who need to edit rules by their rdfs:label as well as an example of how you can create your own custom tabs with any arbitrary combination of Views you find useful. The new mini-tutorial is at:

9/7/2023 Edit: In the tutorial there is a link to Top Quadrant's site for their SHACL demo. They did a reorganization of their site a while ago and that link is stale. Instead use this as the link

to Top Quadrant's SHACL tool:

9/11/2023 Edit: In Protégé 5.5 and later there is currently a bug where the SPARQL Tab won't work if you launch it after you load an ontology (i.e., it's pretty useless until that bug is fixed). There is a simple work around which is to use the Snap SPARQL plugin. I prefer Snap SPARQL anyway because you can add new data with Snap SPARQL (using CONSTRUCT) but you can't with the SPARQL Tab. However, there is a bug in Snap SPARQL where queries with A wildcard in the predicate position won't work. I have one such query in the tutorial:

WHERE { ?customer a pizza:Customer.
?customer ?relation ?relatedToCustomer.}

Because this has a wildcard in the predicate (?relation) this query won't work in Snap SPARQL.

19,268 views17 comments
bottom of page