Knowledge Graph Modeling: Formal Taxonomy micro-pattern using gist

July 29, 2020 | 3 minute read
Michael J. Sullivan
Principal Cloud Solutions Architect
Text Size 100%:

This is the seventh in a series of blogs describing how one would go about modeling an enterprise ontology.

In my last two blogs I showed how one could relatively easily create an informal taxonomy and add facets to it. In this blog we show how to model a formal taxonomy using the gist upper-level ontology to bootstrap our micro-pattern. From the gist definition of taxonomy we have the following:

gist:taxonomy: A controlled vocabulary arranged as a hierarchy of concepts.

Consequently — at least as defined by gist — a taxonomy is not only a type of controlled vocabulary, but it is also a type of collection (see Protégé screenshot below). As such, gist:Taxonomy inherits the properties of both.

One of the key things that differentiates formal from informal taxonomies is that with formal taxonomies, individual sub categories must have one and only one super-category parent. Hence their "formality". Per the gist documentation, the gist:hasSuperCategory object property is defined as:

gist:hasSuperCategory: Categories linked in this way are to represent true subtypes. The categories aren't subtypes, but a class defined by a supercategory will be a superclass of one derived from its subcategory.

Like the other bucket micro-patterns previously discussed in this series of blogs, Formal Taxonomies, while having more "moving parts" than simpler types of classifications, are pretty straightforward once you see the overall pattern: Controlled Vocabulary buckets are instances of gist:Category and are themselves arranged in a formal hierarchy using gist:hasSubCategory and its inverse gist:hasSuperCategory. Child entities attached to these buckets can be of any type. In the diagram shown below I am using instances of gist:Person to identify the physician entities as actual people. Likewise the child entities belong to each Category bucket via the gist:categorizedBy predicate.


@prefix ex1:  <> .
@prefix cat:  <> .
@prefix gist: <> .
@prefix rdfs: <> .

gist:ControlledVocabulary  rdfs:subClassOf  gist:Collection .
gist:Taxonomy  rdfs:subClassOf  gist:ControlledVocabulary .
cat:Profession  a  gist:Taxonomy .

ex1:Tom   a  gist:Person .
ex1:Jill  a  gist:Person .
ex1:Mary  a  gist:Person .
ex1:Bill  a  gist:Person .

cat:Physician    a  gist:Category .
cat:Cardiologist a  gist:Category .
cat:Orthopedist  a  gist:Category .

ex1:Tom   gist:categorizedBy  cat:Cardiologist .
ex1:Jill  gist:categorizedBy  cat:Physician .
ex1:Mary  gist:categorizedBy  cat:Orthopedist .
ex1:Bill  gist:categorizedBy  cat:Orthopedist .

cat:Profession  gist:hasMember  cat:Physician .
cat:Profession  gist:hasMember  cat:Cardiologist .
cat:Profession  gist:hasMember  cat:Orthopedist .

cat:Physician   gist:hasSubCategory  cat:Cardiologist .
cat:Physician   gist:hasSubCategory  cat:Orthopedist .


# cat:Cardiologist  gist:hasSuperCategory  cat:Physician .
# cat:Orthopedist   gist:hasSuperCategory  cat:Physician .

# cat:Physician.    gist:memberOf  cat:Profession .
# cat:Cardiologist  gist:memberOf  cat:Profession .
# cat:Orthopedist   gist:memberOf  cat:Profession .

# cat:some_org_or_person  gist:governs  cat:Profession .

Note that we didn't blindly make everything a subclass of its parent. Rather we used the formality of the gist upper-level ontology to express subclassing on a bucket level only. The child nodes remain merely "categorized" by the bucket to which they belong. In this way, any child node can also be part of any other collection or categorization. Flexibility is key when designing your knowledge graph!

And it goes without saying that adding facets to a Formal Taxonomy is exactly the same as adding facets to an Informal Taxonomy (see adding facet name + values link below).

NEXT BLOG: Ordered Lists.



Michael J. Sullivan

Principal Cloud Solutions Architect

Previous Post

Provisioning Oracle Analytics Cloud with a Private End-Point

Dayne Carley | 1 min read

Next Post

Automating Secondary IP address Failover on Windows Server

Leo Yuen | 4 min read