Beyond Data Modelling

Once a set of models have been defined, they can be extended and used for other data architecture requirements.

APIs

APIs or SoA (Service Oriented Archicture) is commonly used to exchange data.

ALFA supports defining implementation agnostic service definitions. These fully capture all aspects required for a programming interface or a REST endpoint. Once services are defined, ALFA code generators can be used to generate various APIs support interfaces.

service OrderService( authToken : uuid ) {
    placeOrder( ord : Order ) : try< ConfirmedOrder >
    getOrder( Id : uuid ) : Order
    getOrders() : list< Order >
}

Metadata

Organisations need to understand many aspects about data. Where is it stored, how is it used, ownership, legal/regulatory impact etc.

ALFA models can include annotation with additional metadata as per organisational needs. Metadata can be defined against all aspects of ALFA - top level constructs, services, fields, functions. This metadata can be consumed by tools for data architectural needs.

ALFA annotationType`s needs to declared before they can be used. If metadata is maintained by Architects/Engineers, while the models are maintained by Business SME/Modellers, to avoid overlapping changes to the same file and to seperate the ownership of model vs metadata, the metadata can be maintained independent of the main definition by using a ``fragment` definition.

Consider the following definition under the stewardship of the Data Modelling team.

record Employee {
// fields ...
}

To add metadata, Architects can maintain an independent declaration under their ownership.

@Datastore("HR")
fragment record Employee { }

Use of fragment is optional. It exists to help in organisations where the responsibility for aspects of the models are strictly controlled.

Governance

Annotations can be used to define Data Governance aspects for the model.

Consider the annotation declarations below.

annotation Owner ( record, entity ) {
   Name : string
}

annotation PII( record, entity ) { }

Once defined, the new annotation can be used against existing definitions.

@Owner( "HR-IT" )
@PII
record Employee {
   Name : string
}

Using Data Products

Data Domain owners may wish to formally capture data published by their domain and data consumed from others. dataproduct allows owners to define one or many Data Products and publish this contract.

Having Data Products defined allows lineage to be captured for data that flows through various data domains. For an example of how a published Data Product is displayed, please see (3rd tab):

https://alfa-demo.github.io/dataproduct-trade/edm-index.html

Further graphical visualizations will be available for Data Products to show data lineage.