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.
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:
employee -> chiefTransitive 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.
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:
Goals (set) property of `WorkPackage'SELECT Name, "From", To, Width, Length FROM TransitiveEdges WHERE To.TypeName = 'AF-Goal';" to querySELECT 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.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