The Boston Object-Role Modeling Metamodel — Pt4 — Fact Types
Framework for a Knowledge Graph / Index
A Fact Type is one of the atomic building blocks of a Knowledge Index or Knowledge Graph. We recognise them as the predicates that bind together separate model elements to form a new model element.
For instance, the StockedItem Fact Type in the Object-Role Model above links together the Entity Types, Part, Bin and Warehouse to form the representation of a new concept: A stocked item.
The Fact Type has the Fact Type Reading, “Part is in Bin in Warehouse”.
The image below shows a storeman reaching for a part in a bin in a warehouse. A ‘bin’ is warehousing term for a storage container for parts.
The Boston Object-Role Modeling metamodel may itself be represented as an Object-Role Model, with an Entity Type/Objectified Fact Type, MetaModelFactType representing Fact Types within Object-Role Models.
Fact Types, at the topmost level, within the Boston Object-Role Modeling metamodel appear as such:
Models in Boston have a Model Dictionary, which contain the set of Symbols that represent representations of Concepts expressed in the Model. E.g. Value Types, Entity Types, Fact Types and Role Constraints.
Symbols, such as our “StockedItem” symbol (name of the Fact Type), represent the Atoms of Knowledge expressed within a model or a knowledge graph.
The fuller expression of a Fact Type in the Boston metamodel is quite complex, and contains representation of all the component parts of a Fact Type and looks like the below (click to enlarge):
The component parts of a Fact Type are:
- Roles;
- Fact Type Readings;
- Predicate Parts (of Fact Type Readings);
- Facts (Sample Populations);
- Fact Data (of Sample Populations).
NB We omit Role Constraints in this article. E.g. Internal Uniqueness Constraints.
Let’s have a look at those components of the metamodel separately.
Roles
Fact Types consist of one or more Role. Roles are played by a model element, called an “Object” in Object-Role Modeling.
All Objects in the Boston metamodel are Symbols (of a MetaModelConcept).
RoleIds may be shared between Models, and MetaModelRole is the Objectified Fact Type that captures that association, and represents a Role.
So, a Role joins a Symbol for a Fact Tpe, and can have a Name.
This is captured as below:
Fact Type Readings
A Fact Type Reading, such as “Part is in Bin in Warehouse” has a set of Predicate Parts (e.g. “is in” and “in”), with each Predicate Part for a Role, captured by the Value Type, PredicatePartText.
Prebound Text and Postbound Text elements (e.g. “facttype-” in the model above is a Prebound Text) are also captured for each Predicate Part, as below.
The model components surrounding Predicate Parts is broken out below:
Facts and Fact Data (Sample Populations)
Facts are unique to a Fact Type, and by default, a Model. Sample Populations are called Facts in the Boston metamodel.
Facts are written, for Object-Role/Fact-Based Modeling in a form such as:
“Part, 456, is in Bin, ‘H1’, in Warehouse, ‘Sydney’.”
In Boston, a Fact has its own unique Symbol (MetaModelConcept) and so is an instance of something and that something the association of Fact Data (also represented as Symbols) for each Role of the Fact Type (e.g. Values/Symbols, 456, ‘H1’ and ‘Sydney’).
NB Representing a Fact as an Instance is contentious in the Object-Role Modeling community as it implies higher order logic, however does not affect how Object-Role Models are drawn and displayed within the Boston conceptual modelling software, and I support higher-order interpretations of Object-Role Modeling as unavoidable.
Facts and Fact Data are captured in the segment of the metamodel below:
And together, that is how Fact Types and their associated components are captured in the metamodel of the Boston Object-Role Modeling software.
If you enjoyed this content, learn more about Object-Role Modeling with my book, “Mastering Object-Role Modeling”:
Thank you for reading. As time permits I will write more on the metamodel of Object-Role Modeling and how it is implemented in Boston.
===============End==============