Lesson 9.6: Using interface hierarchies
In the previous lesson, we improved the type hierarchies in our book data model by using the principle of composition over inheritance. In this lesson, we’ll explore the behaviour of interface hierarchies and see how they can be used to adapt our model in different ways.
Data table
ISBN-13 | ISBN-10 | Title | Format | Authors | Editors | Illustrators | Other contributors | Publisher | Year | City | State | Country | Page count | Genres | Price | Stock |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
9780008627843 |
0008627843 |
The Hobbit |
ebook |
J.R.R. Tolkien |
J.R.R. Tolkien |
Harper Collins |
2023 |
New York City |
New York |
United States |
310 |
fantasy;fiction |
16.99 |
|||
9780060929794 |
0060929790 |
One Hundred Years of Solitude |
paperback |
Garcia Marquez, Gabriel |
Perennial |
1998 |
New York City |
New York |
United States |
458 |
fiction;historical fiction |
6.12 |
4 |
|||
9780195153446 |
0195153448 |
Classical Mythology |
paperback |
Lenardon, Robert J.;Morford, Mark P. O. |
Oxford University Press |
2002 |
New York City |
New York |
United States |
820 |
history;nonfiction |
34.98 |
12 |
|||
9780375801679 |
0375801677 |
The Iron Giant |
ebook |
Hughes, Ted |
Davidson, Andrew |
Knopf Books for Young Readers |
1999 |
New York City |
New York |
United States |
79 |
fiction;children’s fiction |
33.97 |
|||
9780387881355 |
0387881352 |
Electron Backscatter Diffraction in Materials Science |
hardback |
Schwartz, Adam J.;Kumar, Mukul;Adams, Brent L.;Field, David P. |
Springer |
2009 |
New York City |
New York |
United States |
425 |
nonfiction;technology |
230.37 |
9 |
|||
9780393045215 |
0393045218 |
The Mummies of Urumchi |
paperback |
Barber, Elizabeth Wayland |
W.W. Norton & Company |
1999 |
New York City |
New York |
United States |
240 |
history;nonfiction |
21.6 |
1 |
|||
9780393634563 |
0393634566 |
The Odyssey |
ebook |
Homer |
Wilson, Emily |
W.W. Norton & Company |
2017 |
New York City |
New York |
United States |
656 |
fiction;classics |
13.99 |
|||
9780446310789 |
0446310786 |
To Kill a Mockingbird |
paperback |
Harper Lee |
Grand Central Publishing |
1988 |
New York City |
New York |
United States |
281 |
fiction;historical fiction |
21.64 |
16 |
|||
9780451162076 |
0451162072 |
Pet Sematary |
paperback |
King, Stephen |
Signet |
1984 |
New York City |
New York |
United States |
374 |
horror;fiction |
93.22 |
1 |
|||
9780500026557 |
0500026556 |
Hokusai’s Fuji |
paperback |
Wada, Kyoko |
Katsushika, Hokusai |
Thames & Hudson |
2024 |
London |
United Kingdom |
416 |
art;nonfiction |
24.47 |
11 |
|||
9780500291221 |
0500291225 |
Great Discoveries in Medicine |
paperback |
Bynum, William;Bynum, Helen |
Thames & Hudson |
2023 |
London |
United Kingdom |
352 |
history;nonfiction |
12.05 |
18 |
||||
9780553212150 |
055321215X |
Pride and Prejudice |
paperback |
Austen, Jane |
Bantam Classics |
1983 |
New York City |
New York |
United States |
295 |
fiction;historical fiction |
17.99 |
15 |
|||
9780575104419 |
0575104414 |
Dune |
ebook |
Herbert, Frank |
Hachette Book Group |
2010 |
New York City |
New York |
United States |
624 |
fiction;science fiction |
5.49 |
||||
9780671461492 |
0671461494 |
The Hitchhiker’s Guide to the Galaxy |
paperback |
Adams, Douglas |
1982 |
New York City |
New York |
United States |
215 |
fiction;science fiction |
91.47 |
9 |
||||
9780679425601 |
0679425608 |
Under the Black Flag: The Romance and the Reality of Life Among the Pirates |
hardback |
Cordingly, David |
Random House |
1996 |
New York City |
New York |
United States |
296 |
history;nonfiction |
34.73 |
13 |
|||
9780740748479 |
0740748475 |
The Complete Calvin and Hobbes |
hardback |
Watterson, Bill |
Watterson, Bill |
Andrews McMeel Publishing |
2005 |
Kansas City |
Missouri |
United States |
1451 |
comics;fiction |
128.71 |
6 |
||
9781098108274 |
1098108272 |
Fundamentals of Data Engineering |
ebook |
Reis, Joe;Housley, Matt |
O’Reilly Media |
2022 |
Sevastopol |
California |
United States |
450 |
nonfiction;technology;children’s fiction |
47.99 |
||||
9781489962287 |
148996228X |
Interpretation of Electron Diffraction Patterns |
paperback |
Keown, Samuel Robert;Andrews, Kenneth William;Dyson, David John |
Springer |
1967 |
New York City |
New York |
United States |
199 |
nonfiction;technology |
47.17 |
15 |
|||
9781859840665 |
1859840663 |
The Motorcycle Diaries: A Journey Around South America |
paperback |
Guevara, Ernesto |
Wright, Ann |
Verso |
1996 |
London |
United Kingdom |
160 |
biography;nonfiction |
14.52 |
4 |
|||
9783319398778 |
Physical Principles of Electron Microscopy: An Introduction to TEM, SEM, and AEM |
ebook |
Egerton, R.F. |
Springer |
2016 |
London |
United Kingdom |
196 |
nonfiction;technology |
19.5 |
||||||
9798691153570 |
Business Secrets of The Pharoahs |
paperback |
Crorigan, Mark |
British London Publishing |
2020 |
London |
United Kingdom |
260 |
business;nonfiction |
11.99 |
8 |
Lesson 9.5 schema
define
book sub entity,
abstract,
owns isbn-13,
owns isbn-10,
owns title,
owns page-count,
owns genre,
owns price,
plays contribution:work,
plays publishing:published;
paperback sub book,
owns stock;
hardback sub book,
owns stock;
ebook sub book;
contributor sub entity,
owns name,
plays contribution:contributor;
publisher sub entity,
owns name,
plays publishing:publisher;
place sub entity,
abstract,
owns name,
plays locating:location,
plays locating:located;
city sub place,
plays publishing:location;
state sub place;
country sub place;
contribution sub relation,
relates contributor,
relates work;
authoring sub contribution;
editing sub contribution;
illustrating sub contribution;
publishing sub relation,
relates publisher,
relates published,
relates location,
owns year;
locating sub relation,
relates located,
relates location;
isbn-13 sub attribute, value string;
isbn-10 sub attribute, value string;
title sub attribute, value string;
page-count sub attribute, value long;
genre sub attribute, value string;
price sub attribute, value double;
stock sub attribute, value long;
name sub attribute, value string;
year sub attribute, value long;
Interfaces as types
In the PERA model, interfaces are themselves types, as we saw in Lesson 9.1. Like the data storing types, interface types are able to form hierarchies. Role hierarchies are derived from their dependent relation type hierarchies, while ownership hierarchies are derived from their dependent attribute type hierarchies. Let’s examine an example.
define
isbn sub attribute, abstract, value string;
isbn-13 sub isbn;
isbn-10 sub isbn;
As we saw in Lesson 9.1, the isbn
attribute type exposes an ownership interface, which we’ll call isbn:OWNER
for this discussion. Likewise, isbn-13
and isbn-10
expose the interfaces isbn-13:OWNER
and isbn-10:OWNER
respectively. As isbn-13
and isbn-10
are subtypes of isbn
, this means that isbn-13:OWNER
and isbn-10:OWNER
are subtypes of isbn:OWNER
.
Role hierarchies work in a similar way, but have a major difference. Whereas all attribute types have an associated ownership interface, some relation types do not have role interfaces of their own, instead inheriting them from supertypes. We saw this in Lesson 9.5 with the following relation type hierarchy.
define
contribution sub relation,
relates contributor,
relates work;
authoring sub contribution;
editing sub contribution;
illustrating sub contribution;
Here contribution
defines two interfaces: contribution:contributor
and contribution:work
, and these are also inherited by its subtypes, which have no roles of their own. This means that all four relation types expose these same two interfaces. Consider the following instead.
define
contribution sub relation,
relates contributor,
relates work;
authoring sub contribution,
relates author as contributor;
editing sub contribution,
relates editor as contributor;
illustrating sub contribution,
relates illustrator as contributor;
Here authoring
, editing
, and illustrating
each expose a new interface: authoring:author
, editing:editor
, and illustrating:illustrator
respectively. These interfaces override the interface contribution:contributor
, meaning that it is no longer exposed by the subtypes of contributor
. Because the newly defined interfaces override an interface from the parent type, these interfaces authoring:author
, editing:editor
, and illustrating:illustrator
are subtypes of the parent interface contribution:contributor
. Meanwhile, the interface contribution:work
is still exposed by all four relation types.
Interface variance
The way in which interface implementations are inherited is determined by their variance. Interface implementations, as defined in owns
and plays
statements, are:
-
Covariant in the implementing object type. This means that the statement also applies to subtypes of the object type by inheritance.
-
Invariant in the implemented interface type. This means that the statement does not also apply to subtypes of the interface type.
Let’s consider the following example, featuring two plays
statements.
define
book plays contribution:work;
contributor plays contribution:contributor;
In the first statement, the implementing object type is book
and the implemented interface type is contribution:work
. The object type has three subtypes paperback
, hardback
, and ebook
, and they also implement contribution:work
by inheritance because the statement is covariant in book
.
In the second statement, the implementing object type is contributor
and the implemented interface type is contribution:contributor
. The interface type has three subtypes authoring:author
, editing:editor
, and illustrating:illustrator
, but contributor
does not also implement them because the statement is invariant in contribution:contributor
.
Let’s consider another example, this time with an owns
statement.
define
book owns isbn;
The implementing object type is book
and the implemented interface type is isbn:OWNER
. This time, both have subtypes. The object type has three subtypes paperback
, hardback
, and ebook
, and they also implement isbn:OWNER
. Meanwhile, the interface type has two subtypes isbn-13:OWNER
and isbn-10:OWNER
, and book
does not also implement them (nor do its subtypes).
As we learned in Lesson 5.5, if an attribute type is abstract, then any owners must also be abstract. Because the implementation of |
Because implementations are invariant in the interface, this means that we must separately declare implementations of their subtypes if we wish to use them, as follows1.
define
contributor plays authoring:author;
contributor plays editing:editor;
contributor plays illustrating:illustrator;
book owns isbn-13;
book owns isbn-10;
Using role overrides effectively
Earlier in this lesson, we encountered two possible design strategies for the subtypes of contribution
: one in which the subtypes inherit the role contribution:contributor
, and one in which the role was overridden with specialized subtypes. The two strategies result in identical querying capabilities. When the role is inherited, we can query contribution
and its subtypes with the following patterns:
-
To describe an instance of
contribution
or one of its subtypes:(contributor: $person, work: $book) isa contribution;
-
To describe an instance of a specific subtype of contribution (e.g.
authoring
):(contributor: $person, work: $book) isa authoring;
-
To describe an instance of
contribution
only, not one of its subtypes:(contributor: $person, work: $book) isa! contribution;
When the role is overridden, we can do the same with the following patterns instead:
-
To describe an instance of
contribution
or one of its subtypes:(contributor: $person, work: $book) isa contribution;
Here, using
contributor
in the relation tuple matches bothcontribution:contributor
and its subtypes by inheritance polymorphism. -
To describe an instance of a specific subtype of contribution (e.g.
authoring
):(author: $person, work: $book) isa authoring;
-
To describe an instance of
contribution
only, not one of its subtypes:(contributor: $person, work: $book) isa! contribution;
The only thing that changes is the way we query the specific subtypes of the relation type. Even then, we can easily use role inference to omit the roles from the pattern as we saw in Lesson 7.2, and use the same queries throughout. Thus, the querying capabilities of the model are the same regardless of whether we inherit or override a role. In fact, this is true of any model involving roles that can be inherited or overridden.
However, there is a key difference in the way the roles must be implemented in these two cases. Consider the following definition:
define
contributor plays contribution:contributor;
If contribution:contributor
is inherited by the subtypes of contribution
, then contributor
will be able to play the role in those relation types as well, as they will all expose the same role interface. Conversely, if the role is overridden in the subtypes of contribution
, then contributor
will not be able to play roles in the subtypes as the plays
statement is invariant in the role, as we saw above.
As a result, when building a relation type hierarchy, the primary factor to consider when deciding whether to inherit or override a role is whether roleplayers of the relation supertype should also be roleplayers of the relation subtypes. In this particular case, anyone capable of making a contribution to a book is also able to author, edit, or illustrate a book, by definition. As such, it makes most sense for the subtypes of contribution
to inherit the role contribution:contributor
rather than override it.
In other cases, it may be more appropriate to override roles. The following schema excerpt for a filesystem access management model is such an example. Here, we ensure that all users are able to execute system actions, but only admins are able to execute them with admin privileges.
define
user sub entity,
plays action-execution:executor;
admin sub user,
plays privileged-execution:priveleged-executor;
action-execution sub relation,
relates action,
relates executor;
privileged-execution sub action-execution,
relates privileged-executor as executor;
Footnotes
-
^ In some cases, it might seem cumbersome to have to explicitly define each implementation of an interface’s subtypes, but the invariance is essential to prevent logical fallacies in data model. Consider the following set of facts:
-
All humans are animals.
-
All geese are animals.
-
All animals can join animal groups.
-
All flocks are animal groups.
-
All geese can join flocks.
Now consider the following deduction:
-
All animals can join animal groups, and all flocks are animal groups, therefore all animals can join flocks.
If this deduction were correct, it would allow humans to join flocks, despite the fact that only geese should be able to join flocks! The deduction is obviously fallacious, specifically by affirming the consequent. Now consider if we translated our list of facts into TypeQL. It might look something like this:
define animal sub entity, abstract; human sub animal; # all humans are animals goose sub animal; # all geese are animals animal-group sub entity, abstract; group-membership sub relation, abstract, relates group, relates group-member; animal-group plays group-membership:group; animal plays group-membership:group-member; # all animals can join animal groups flock sub animal-group; # all flocks are animal groups flock-membership sub group-membership, relates flock as group, relates flock-member as group-member; flock plays flock-membership:flock; goose plays flock-membership:flock-member; # all geese can join flocks
If definitions of interface implementations were covariant in the interface type instead of invariant, then
animal
, and all of its subtypes includinghuman
, would inherit the ability to playflock-membership:flock-member
! -