Skip to main content

Property graph

Overview

The Practice Shaper property graph is composed of:

  • type nodes - vertices representing abstract concepts (classes)
  • instance nodes - concrete entities each instantiating one of the available type nodes
  • relations - they are used to define relationships between nodes. For example, an instance node will always express aninstanceOf relation towards a type node

Type nodes and the relations among them are defined by the Platform Team when configuring a Data Landscape.

Instance nodes and their relationships with type nodes (and other instance nodes) are generated by end users as they interact with the platform, within the context of a data landscape.

The Platform Team can develop and publish a set of creation templates: visual wizards that guide users through the process of creating system or component instances. They ensure that relationships and constraints defined in the property graph are automatically enforced, thereby simplifying the process and hiding complexity.

tip

If you are familiar with object-oriented programming, you can think of type nodes as classes that define relationships with other classes through their attributes. Instance nodes are the objects that instantiate these classes, adhering to the behaviors and attributes of their parent. Creation templates are akin to class constructors, guiding the creation process while ensuring compliance with predefined relationships and constraints.

Witboost catalog

Both type and instance nodes are registered as Witboost entities: their definition is provided by a catalog info YAML file (hosted in a Git repository), and they are part of the Witboost catalog.

The catalog serves as a centralized repository that manages ownership and metadata for all entities within Witboost. It is designed around the use of metadata YAML files, which are parsed, validated, aggregated and displayed in Witboost.

A sample graph

Before digging into the attributes of the different node types, let's look at a sample property graph, and try to understand it at high-level.

Sample Practice Shaper property graph

This is the same kind of graph the Platform Team can see, edit and customize from the Practice Shaper settings page.

Ideally, this graph should include system, component, and domain instance nodes as well, but for practical reasons, it only focuses on types and data landscapes.

From the graph above, we can infer that:

  • this Witboost instance supports 3 data landscapes: Data Lake, Data Mesh, Machine Learning

    Data Landscape selector

  • 2 domain types are available: Business Domain, Department (more about domains in the following sections). A domain, instance of Business Domain type, can only be part of (subdomain of) another instance of Business Domain. The same is true for Department.

  • within the Data Lake data landscape:

    • users can work on instances of the BI Project system type (i.e., each system in the Data Lake landscape is a BI Project)
    • a BI Project can be part of an instance of a Business Domain
    • a BI Project can include components of type Consumer View and components of type Dashboard
    • a Dashboard component instance can only read from a Consumer View component instance (even if they are not in the same BI Project instance)
    • a Consumer View component instance can only read from another Consumer View component instance (even if in different BI projects)
  • within the Data Mesh data landscape:

    • users can work on instances of the Data Product system type (i.e., as by definition of Data Mesh, the unit of work is the data product)
    • data products can be part of domains of type Business Domain
    • data products can contain output ports, storages, schema components, control ports, and workloads

At this point, by looking at the graph, it should also be clear how the Machine Learning data landscape is structured. Notice how a ML Sandbox cannot belong to a Business Domain; instead, it must be defined within a domain of type Department. For instance, if your organization has Finance and Sales business domains, these domains can own and manage data products and BI projects, but not Machine Learning sandboxes. The responsibility for maintaining Machine Learning sandboxes probably lies with your Data Science department. In this example, Finance, Sales, and Data Science are domain instances.

info

As you can notice in the graph, some nodes may be marked by icons indicating specific attributes, such as consumable and shoppable, which we will explore further in the next sections.

Type nodes

Domain type

A domain is a logical boundary within an organization that groups related data, processes, and responsibilities. Domains are typically aligned with business units or areas of expertise and are intended to decentralize data ownership and management. Each domain is responsible for its own data projects, that are made available for consumption by other domains within the organization.

A domain type represents a class of domains.

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v2
kindstringYesFixed to DomainType
metadata.namestringYesUnique entity namebusiness-domain
metadata.displayNamestringNoDisplay name to show in the UI. When not provided,metadata.name will be displayedBusiness Domain

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
partOfDomainTypespec.partOfDomainstringNoReference to a domain type (it can be reflexive).

When provided, an instance of this domain type can optionally be marked as a subdomain of an instance belonging to the referenced domain type.

If not defined, instances of this domain type can be subdomains of any registered domain instance, regardless of its domain type.
domaintype:default/business-domain

System type

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v2
kindstringYesFixed to SystemType
metadata.namestringYesUnique entity namedataproduct
metadata.displayNamestringNoDisplay name to show in the UI. When not provided,metadata.name will be displayedData Product
metadata.pluralizedDisplayNamestringNoPluralized display name to show in the UI. If not provided, the display name will be automatically pluralized when necessaryData Products
spec.resourceTypeIdstringYesIdentifier of this class. It must be unique accross all the registered system and component types and must never be changed.

This is a critical field as it will appear as the value of the kind field in the descriptor of instances of this type. Thus, it can be used by external systems (provisioners, computational governance platform, marketplace, data catalogs) to identify the specific resource type of the instance they are processing
dataproduct
spec.resourceTypeConfigobjectNoResource type configuration for the integration with the Computational Governance Platform. More on this in the dedicated section in the documentation for Platform Teams
spec.shoppablebooleanNo (default:false)Instances of a shoppable type will be marked as shoppable by default, though they can override their parent's attribute. End users can request access to a shoppable system in the Witboost marketplace to get access to all its consumable interfaces (i.e., all the system's components and their subcomponents with the consumable flag enabled). More on shoppable and consumable attributes in the dedicated section of the documentation
spec.partiallyDeployableInlist[string]NoList of environments in which instances of this system type can be deployed partially (i.e., users can select which system's components to deploy). In environments that are not listed here, the system instance can only be deployed as a whole (i.e., as an atomic deployable unit)['development', 'qa']

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
belongsToTaxonomyspec.belongsTostringYesReference to a registered data landscape (aka taxonomy).

Assigns this system type and all its related component types and their instances to one of the available data landscapes
taxonomy:default/data-mesh
partOfDomainTypespec.partOfDomainstringYesReference to a registered domain type.

Instances of this system type can only be part of a domain instance of the referenced domain type
domaintype:default/business-domain

Component type

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v2
kindstringYesFixed to ComponentType
metadata.namestringYesUnique entity nameoutputport
metadata.displayNamestringNoDisplay name to show in the UI. When not provided,metadata.name will be displayedOutput Port
metadata.pluralizedDisplayNamestringNoPluralized display name to show in the UI. If not provided, the display name will be automatically pluralized when necessaryOutput Ports
spec.resourceTypeIdstringYesIdentifier of this class. It must be unique accross all the registered system and component types and must never be changed.

This is a critical field as it will appear as the value of the kind field in the descriptor of instances of this type. Thus, it can be used by external systems (provisioners, computational governance platform, marketplace, data catalogs) to identify the specific resource type of the instance they are processing
outputport
spec.consumablebooleanNo (default:false)Instances of a consumable component type will be marked as consumable by default, though they can override their parent's attribute. A consumable component is ready to be transmitted, used, or processed, indicating that the output is in a format or state that can be readily consumed. The tech adapters of consumable components will be involved in ACL update operations
spec.shoppablebooleanNo (default:false)Instances of a shoppable type will be marked as shoppable by default, though they can override their parent's attribute. End users can request access to a shoppable component in the Witboost marketplace to get access to all its consumable descendants (i.e., all its subcomponents or the component itself having the consumable flag enabled). More on shoppable and consumable attributes in the dedicated section of the documentation

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
partOfSystemTypespec.partOfSystemstringYesReference to a registered system type.

Instances of this component type can only be part of a system instance of the referenced system type
systemtype:default/dataproduct
readsFromComponentTypespec.readsFromlist[string]NoList of references to registered component types. They can be in a different data landscape.

When provided, instances of this component type can read from consumable component instances of the referenced component types.

If not provided, or empty, instances of this component type cannot read from any component instance.

In both cases, component instances can always read from resource instances.
["componenttype:default/outputport", "componenttype:default/consumerview"]

Instance nodes

As explained above, nodes in the Practice Shaper are implemented as Witboost entities. The following sections describe the main attributes and relations of instance entities, which are relevant to the Practice Shaper.

Data Landscape (aka Taxonomy)

A Data Landscape can also be referred to as a Taxonomy because it involves the systematic classification and organization of various data elements and their relationships within an organization. Just as a biological taxonomy categorizes living organisms into hierarchical groups based on shared characteristics, a data taxonomy organizes data assets, their attributes, and their interconnections into a structured framework.

Attributes

Catalog Info propertyTypeRequiredDescription
apiVersionstringYesFixed to witboost.com/v2
kindstringYesFixed to Taxonomy
metadata.namestringYesUnique entity name
metadata.displayNamestringNoDisplay name to show in the UI. When not provided,metadata.name will be displayed
spec.enabledbooleanYesWhether this data landscape and all its underlying types and instances are enabled and accessible

Domain

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to backstage.io/v1alpha1
kindstringYesFixed to Domain
metadata.namestringYesUnique entity name
spec.mesh.namestringYesDisplay name to show in the UI

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
instanceOfDomainTypespec.instanceOfstringNoReference to the domain type this domain is instance of.

If not provided, it will default to the domain type set under configuration practiceShaper.migration.defaultDomainTypeRef (default value: domaintype:default/business-domain)
domaintype:default/business-domain
partOfDomainspec.subDomainOfstringYesmetadata.name of another domain instance, parent of this domain.

This relation could be constrained by the domain type of this instance (refer to documentation of the subDomainOf relation in the Domain type section)
parent-domain-name
ownedByUser | Groupspec.ownerstringYesReference to a user or group owner of this domaingroup:my-group-name

System

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v1
kindstringYesFixed to System
metadata.namestringYesUnique entity name
spec.typestringYesResource type identifier.

When spec.instanceOfis provided, this field is automatically filled with the value of the spec.resourceTypeId attribute of the system type this system is instance of
dataproduct
spec.mesh.namestringYesDisplay name to show in the UI
spec.mesh.versionstringYesA regular three elements version with major, minor and patch components1.0.0
spec.mesh.useCaseTemplateIdstringNoA Witboost URN of the template used to scaffold the systemurn:dmb:itm:aws-workload-dbt-transformation-template:0
spec.mesh.infrastructureTemplateIdstringNoA Witboost URN of the technology adapter that will handle the system's deploymenturn:dmb:itm:cdp-aws-dataproduct-provisioner:1
spec.mesh.shoppablebooleanNoEnd users can request access to a shoppable system in the Witboost marketplace to get access to all its consumable interfaces (i.e., all the system's components and their subcomponents with the consumable flag enabled). More on shoppable and consumable attributes in the dedicated section of the documentation.

If not provided, the value will be inherited from the spec.shoppable attribute of the system type this system is instance of
spec.mesh.developmentGroupstringNoDeprecated - refer to spec.owner

Reference to the group of the development team of the system
group:my-group-name
spec.mesh.kindstringNoDeprecated - refer to spec.type

Resource type identifier.

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
instanceOfSystemTypespec.instanceOfstringNoReference to the system type this system is instance of.

If not provided, it will be automatically filled with the reference to a system type having spec.resourceTypeId equals to the value of the spec.mesh.kind property of this system, or spec.type (if spec.mesh.kind is undefined)
systemtype:default/dataproduct
partOfDomainspec.domainstringYesReference to a domain instance this system belongs to.

This relation is constrained by the system type of this instance (refer to the documentation of the partOfDomain relation in the System type section)
domain:domain-name
systemOwnedByUser | Groupspec.mesh.projectOwner or spec.mesh.dataProductOwner (deprecated)stringNoReference to a user or group owner of this systemuser:user-name
developedByUser | Groupspec.ownerstringNoReference to a user or group main developer of this systemuser:user-name

Component

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v1
kindstringYesFixed to Component
metadata.namestringYesUnique entity name
spec.typestringYesResource type identifier.

When spec.instanceOfis provided, this field is automatically filled with the value of the spec.resourceTypeId attribute of the component type this component is instance of
outputport
spec.lifecyclestringYesThe lifecycle state of the componentexperimental, production, deprecated
spec.mesh.namestringYesDisplay name to show in the UI
spec.mesh.versionstringYesA regular three elements version with major, minor and patch components1.0.0
spec.mesh.useCaseTemplateIdstringNoA Witboost URN of the template used to scaffold the componenturn:dmb:itm:aws-workload-dbt-transformation-template:0
spec.mesh.infrastructureTemplateIdstringNoA Witboost URN of the technology adapter that will handle the system's deploymenturn:dmb:itm:cdp-aws-op-provisioner:1
spec.mesh.dependsOnlist[string]NoList of URNs of other components part of the same system, this component depends on["urn:dmb:cmp:marketing:system-a:0:storage-a", "urn:dmb:cmp:marketing:system-a:0:storage-b"]
spec.mesh.shoppablebooleanNoEnd users can request access to a shoppable component in the Witboost marketplace to get access to all its consumable descendants (i.e., all its subcomponents or the component itself having the consumable flag enabled). More on shoppable and consumable attributes in the dedicated section of the documentation.

If not provided, the value will be inherited from the spec.shoppable attribute of the component type this component is instance of
spec.mesh.consumablebooleanNoA consumable component is ready to be transmitted, used, or processed, indicating that the output is in a format or state that can be readily consumed. The tech adapters of consumable components will be involved in ACL update operations.

If not provided, the value will be inherited from the spec.consumable attribute of the component type this component is instance of
spec.mesh.kindstringNoDeprecated - refer to spec.type

Resource type identifier.

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
instanceOfComponentTypespec.instanceOfstringNoReference to the component type this component is instance of.

If not provided, it will be automatically filled with the reference to a component type having spec.resourceTypeId equals to the value of the spec.mesh.kind property of this component, or spec.type (if spec.mesh.kind is undefined)
componenttype:default/outputport
partOfSystemspec.systemstringYesReference to a system instance this component belongs to.

This relation is constrained by the component type of this instance (refer to the documentation of the partOfSystem relation in the Component type section)
system:system-name
ownedByUser | Groupspec.ownerstringYesReference to a user or group owner of this componentuser:user-name
readsFromComponent | Resourcespec.mesh.readsFromlist[string]NoList of URNs of components or resources in Witboost read by this component.

This relation is constrained by the component type of this instance (refer to the documentation of the readsFrom relation in the Component type section)
["urn:dmb:cmp:marketing:system-b:0:storage-a", "urn:dmb:cmp:marketing:system-c:0:storage-b"]

Resource

A resource represents an external system (e.g., an API, a database, a file) that is not managed within Witboost but can be accessed by its components. For instance, while a public dataset might not be owned by the organization using Witboost, the organization's components can still read data from it.

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v1
kindstringYesFixed to Resource
metadata.namestringYesUnique entity name
spec.ownerstringYesReference to a user or group owner (maintainer in Witboost) of this resourceuser:user-name
spec.typestringYesKind of resourceapi, file, database
spec.mesh.namestringYesDisplay name to show in the UI

Template

Attributes

Catalog Info propertyTypeRequiredDescriptionExample
apiVersionstringYesFixed to witboost.com/v1
kindstringYesFixed to Template
metadata.namestringYesUnique entity name
metadata.titlestringNoDisplay name to show in the UI
spec.ownerstringNoName of a group, owner of this templategroup-name

Relations

Display nameTarget kindCatalog Info propertyTypeRequiredDescriptionExample
generatesSystemType | ComponentTypespec.generatesstringYes, if the template includes a fetch:template actionReference to the system type or component type of the system/component instances generated by this template.

This will be used to group templates in the UI, based on the generated types, and to automatically populate the spec.instanceOf property of the generated system or component instances
systemtype:default/dataproduct

Errors

While processing the entities registered in the Witboost catalog, the Practice Shaper enforces compliance with the defined constraints.

As you already know, Witboost entities are backed by a catalog info file hosted on a Git repository. A pool of scheduled processors periodically read these files to update the attributes and relations of the related entities on Witboost.

When a processor detects a Practice Shaper violation, it will emit an error, that will be displayed in the entity page. For example:

Sample processing error

tip

By using the templates provided by your Platform Team, you will rarely encounter these types of errors, as they are designed to create entities that are fully compliant with the Practice Shaper.