Enterprise Transitive Edge

with TOGAF example

Posted by steve on March 29, 2025

transitive edge Introduces the idea of a transitive edge as a projection of an edges between nodes that can be used to hide the details of the internal connections within a graph, allowing you to focus on the start and end of graph. Genealogy family trees use just two basic edge types {mother, father} and one derived edge (child) - which in Hiperspace are views projected from relational facts: Person { Name: 'Mark', Mother: 'Mary', Father: 'John'} can be projected as a node and four edges { Mark -(mother)-> Mary; Mark -(father)-> John; Mark <-(child)- Mary; Mark <-(child)- John; } that do not need to be stored to be accessed.

Problem

If you have an organisation with three divisions, each with 100 employees spread across 10 countries, each with 30 employees in each. If the chief executive has 3 devisional and 10 country reports, how many people in total report to the chief? The logical answer is 300, provided you don't double count! You can achieve the aggregate by:

  • Use a global list in addition to division and country
  • Use domain knowledge : count only division or country reporting, but not both
  • Use split allocation: and aggregate allocation - a problem arises if you introduce split allocation between country and region, leading to double counting
  • Use transitative reporting, and ignore the intermediate edges and focus on employee -> chief

Transitive Edges solve all of these problems by hiding the intermediate edges. The problem becomes exponentially more complex when we consider Enterprise Architecture and the myriad connections between nodes.

If you want to prioritise work-packages for a System by the business goal being addressed, there are a myriad different paths between the work-package and business-goal with potentially many-many duplicates. What we really want is to is to transitively project all the paths between work-package and goal and priorize by business goal.

Solution

Hiperspace TransitiveEdge provides a mechanism to the declare Goals as an extension property of Work-Package. The TOGAF sample includes the segment Togaf.Has.WorkPackage that has been extended with a property StrategicEdges that is derived from a function, and Goals that projects the set of TransitativeEdge as Goal properties.

segment Togaf.Has.WorkPackage : Togaf.Base 
    = Node        ( SKey = SKey, Name = Name, TypeName = "AF-WorkPackage"),
      Edge        (From = owner, To = this, Name = Name, TypeName = "AF-Has-WorkPackage") ,
      Togaf.Edge2 (From = this, To = owner, Name = Name, TypeName = "AF-WorkPackage-For") ,
      Graph.TransitiveEdge = StrategicEdges 
[
    "All Edges that can be projected as Transitative Edges to a Business Goal"
    @Once
    StrategicEdges  = StrategicEdge(this),
    Goals           = Goals(StrategicEdges)
];

The functions use the Graph.Route definition

From Type To Type ^ Edge Type
AF-CourseOfAction AF-Goal AF-CourseOfAction-Goal
AF-Capability AF-CourseOfAction AF-Capability-Related
AF-Function AF-CourseOfAction AF-Function-CourseOfAction
AF-Capability AF-Capability ^ AF-Capability-Part
AF-Function AF-Function ^ AF-Function-Part
AF-Process AF-Function AF-Process-Function
AF-Process AF-Capability AF-Process-Capability
AF-Activity AF-Process AF-Activity-Process
AF-Service AF-Activity AF-Activity-Service
AF-System AF-Service AF-System-Service
AF-Component AF-System AF-Component-System
AF-Deployed AF-Component AF-Deployed-Component
AF-Platform AF-Service *
AF-Platform AF-Platform ^ *
AF-WorkPackage AF-Function AF-WorkPackage-For
AF-WorkPackage AF-Capability AF-WorkPackage-For
AF-WorkPackage AF-Goal AF-WorkPackage-For
AF-WorkPackage AF-Activity AF-WorkPackage-For
AF-WorkPackage AF-Process AF-WorkPackage-For
AF-WorkPackage AF-CourseOfAction AF-WorkPackage-For
AF-WorkPackage AF-Service AF-WorkPackage-For
AF-WorkPackage AF-System AF-WorkPackage-For
AF-WorkPackage AF-Component AF-WorkPackage-For
AF-WorkPackage AF-Deployed AF-WorkPackage-For
AF-WorkPackage AF-Platform AF-WorkPackage-For

"^" denotes recursive search up through the hierarchy of {platform, function, business-capability}.

The strategic goal for each and every work-package can be found by:

  1. Reading the Goals (set) property of `WorkPackage'
  2. Using SQL query the view TransitiveEdges "SELECT Name, "From", To, Width, Length FROM TransitiveEdges WHERE To.TypeName = 'AF-Goal';" to query
  3. Using SQL join of WorkPackage "SELECT w.*, e.* FROM WorkPackages AS w, w.StrategicEdges AS e;" - the join type here is appears to be a cross-join, but only because the sub-table StrategicEdges has an implicit join to work-package.

Execution

Hiperspace uses a parallel Breadth-first search to search the graph of nodes, with recursive back-search to eliminate cyclic paths. The access of each Edge set use parallel search of each element SetSpace that provides the Edge view, which (for very large datasets) can also parallel search partitions and generations.

Parallel search, and fact direct access not data means that even huge datasets are processes very quickly