workspace { name "Data and knowledge management platform" !identifiers hierarchical configuration { visibility private } model { properties { "structurizr.groupSeparator" "." } assetOwner = person "Asset owner" { description "A person who owns the digital asset" } assetViewer = person "Asset viewer" { description "A person who views the digital asset" } dgo = person "Data Governance Officer" { description "Responsible for data governance" } // org_admin = person "Organisation administrator" { // description "Administers access within the organisation" // } platformAdmin = person "Platform Administrator" { description "Administrator of the central DKMP node" } open_research_repo = softwareSystem "Open Research Repository" { description "Repository for storing digital assets" tags "external" properties { "hints" "This is an external system like Zenodo, that will not be modelled in detail. This should be mentioned in your description." } } dkmp_central_node = softwareSystem "DKMP central node" { description "Centralised node for data and knowledge management" properties { "hints" "DKMP stands for Data and Knowledge Management Platform. It is used as the central repository to store digital assets and manage access to them." } tags "core_extend" "internal" drupal_framework = container "Drupal" { technology "Drupal 10, PHP 8, JavaScript" description "Drupal with custom extensions" tags "core_extend" drupal_core = component "Drupal Core" { technology "Drupal 10" properties { "fr" "6.3" } description "Drupal core functionality" tags "core_extend" } asset_visualisation_module = component "Asset Visualisation Module" { properties { "fr" "5.2" } technology "PHP" description "Service for visualising digital assets" -> drupal_core "Displays digital asset metadata" "" "core_extend" tags "core_extend" } metadata_authoring_module = component "Metadata Authoring Service" { properties { "fr" "1.1,1.2,1.4,2.2,3.1,3.4,3.5,4.3,7.1" } technology "PHP" description "Service for managing metadata for digital assets" -> drupal_core "Manages metadata for digital assets" "" "core_extend" tags "core_extend" } data_enrichment_module = component "Data Enrichment Module" { properties { "fr" "1.3" } technology "PHP" description "Service for enriching digital assets with additional data" -> drupal_core "Enriches digital assets with additional data""" "core_extend" tags "core_extend" } data_harmonization_module = component "ModularMMM Interopability Module" { properties { "fr" "4.3" } technology "PHP" description "Service for harmonizing data for interporability between different simulation tools and model types" -> drupal_core "Harmonizes data for interporability between different simulation tools and model types" "" "core_extend" tags "core_extend" } lca_module = component "Lifecycle Assessment Module" { properties { "fr" "5.4,7.4" } technology "PHP" description "Provides integration with the lifecycle assesment tool" -> drupal_core "Provides data from LCA tool for visualisation""" "core_extend" tags "core_extend" } large_file_upload_module = component "Large File Upload Module" { properties { "fr" "1.5" } technology "PHP" description "Provides support for uploading large files directly to S3 storage" -> drupal_core "Extends forms with large file upload capabilities""" "core_extend" tags "core_extend" } unit_widget_module = component "Unit Widget Module" { properties { "fr" "3.5" } technology "PHP" description "Provides a widget for selecting units of measurement with automated conversion" -> drupal_core "Provides unit conversion functionality in forms""" "core_extend" tags "core_extend" } asset_entity_manager_module = component "Asset Form Manager" { properties { "fr" "3.2,4.3" } technology "PHP" description "Manager forms for digital assets with accordance to the ontology" -> drupal_core "Mantains entities for experiments and simulations" "" "core_extend" tags "core_extend" } asset_indexing_discovery_module = component "Asset Indexing and Discovery" { properties { "fr" "3.2,5.3" } technology "PHP" description "Provides indexing,expliration and search functionality for digital assets" -> drupal_core "Extends search functionality" "" "core_extend" tags "core_extend" } chada_moda_module = component "CHADA MODA Exporter" { properties { "fr" "3.3,5.1" } technology "PHP" description "Process editor for CHADA MODA models with export functionality" -> drupal_core "Provides CHADA MODA document generation capabilties" "" "core_extend" tags "core_extend" } software_artefact_manager_module = component "Software Artefact Manager" { properties { "fr" "4.1,6.3" } technology "PHP" description "Manages Git repositories and source code for digital assets in Git repositories" -> drupal_core "Manages source code for digital assets using GIT" "" "core_extend" tags "core_extend" } temporary_file_storage_module = component "Temporary File Storage" { properties { "fr" "2.1,6.5" } technology "PHP" description "Temporary storage for digital assets" -> drupal_core "Manages temporary storage for digital assets" tags "core_extend" } access_management_module = component "Access Management" { properties { "fr" "6.1,6.2,6.4" } technology "PHP" description "Manages access to digital assets" -> drupal_core "Manages access to digital assets""" "core_extend" tags "core_extend" } asset_publishing_module = component "Asset publisher" { properties { "fr" "7.3" } technology "PHP" description "Publishes digital assets in established repositories like Zenodo" -> drupal_core "Publishes digital assets""" "core_extend" tags "core_extend" } dkmp_api_module = component "DKMP API" { properties { "fr" "3.4,3.5,7.1,7.2,7.3" } technology "PHP" description "API for managing digital assets" -> drupal_core "Provides API for managing digital assets" "" "core_extend" tags "core_extend" } event_management_module = component "Event Management" { properties { "fr" "6.4" } technology "PHP" description "Manages events and queue related to digital assets in RabbitMQ" -> drupal_core "Provides integration with RabbitMQ for event management""" "core_extend" tags "core_extend" } } reverse_proxy = container "Reverse Proxy" { tags "extend" technology "Nginx" properties { "fr" "6.4" } description "Reverse proxy for routing requests to the appropriate services" } event_subsystem = container "Event Subsystem" { tags "integration" properties { "fr" "6.4,7.2" } description "Event subsystem for asynchronous communication" event_consumer = component "Event Consumer" { technology "Python" description "Service for consuming events" } rabbitmq = component "Message broker for asynchronous communication" { technology "RabbitMQ" description "Service for consuming events" } } logging_subsystem = container "Logging Subsystem" { tags "extend" technology "Grafana, Loki, Fluent Bit" description "Service for logging events" properties { "fr" "6.3,6.4" } } metadata_parsing_subsystem = container "Metadata Parsing Subsystem" { tags "extend" technology "Python" description "Service for parsing metadata from digital assets" properties { "fr" "1.1,1.2,1.4,3.1,3.5" } metadata_parser_api = component "Metadata Parser API" { technology "Python" description "API for parsing metadata from digital assets" } metadata_parser_engine = component "Metadata Parser Engine" { technology "Python" description "Service for for running metadata parsers from registry" } metadata_parser_registry = component "Metadata Parser Registry" { technology "Python" description "Registry for metadata parsers" } metadata_validator = component "Metadata Validator" { technology "Python" description "Service for validating metadata" } } data_enrichment_subsystem = container "Data Enrichment Subsystem" { tags "extend" technology "Python" description "Service for enriching digital assets with additional data" properties { "fr" "1.3" } data_enrichment_engine = component "Data Enrichment Engine" { technology "Python" description "Service for enriching digital assets with additional data using a data enrichment service from registry" } data_enrichment_registry = component "Data Enrichment Registry" { technology "Python" description "Registry for data enrichment services" } data_enrichment_api = component "Data Enrichment API" { technology "Python" description "API for enriching digital assets with additional data" } } asset_publishing_subsystem = container "Asset Publishing Subsystem" { tags "extend" properties { "fr" "7.3" } technology "Python" description "Service for publishing digital assets" publisher_api = component "Publisher API" { technology "Python" description "API for publishing digital assets" } publisher_registry = component "Publisher Registry" { technology "Python" description "Registry for publishers" } asset_publisher_engine = component "Asset Publisher Engine" { technology "Python" description "Service for publishing digital assets using a publisher from registry" } } chada_moda_subsystem = container "CHADA MODA Subsystem" { tags "extend" properties { "fr" "3.3" } technology "Python" description "Service for rendering CHADA MODA models" chada_moda_renderer_api = component "Chada Moda Renderer API" { technology "Python" description "API for rendering CHADA MODA models" } chada_moda_renderer = component "Chada Moda Renderer" { technology "Python" description "Service for rendering CHADA MODA models" } plantuml_renderer = component "PlantUML" { technology "PlantUML, Java" description "PlantUML engine for rendering diagrams" } } ontology_subsystem = container "Ontology Subsystem" { tags "extend" properties { "fr" "3.2,3.5,4.3,5.3" } technology "Python" description "Ontology management microservice, generation of SHACL constraints and SPARQL queries" ontology_api = component "Ontology API" { technology "Python" description "API for ontology operations" } ontology_manager = component "Ontology Manager" { technology "Python" description "Service for managing ontologies and performing operations on them like retrieving constraints or unit conversion" } } sparql_server = container "SPAQRL Server" { tags "extend" properties { "fr" "3.2,4.3,3.5,5.3" } technology "Apache Jena Fuseki" description "SPARQL server for querying ontologies" } lca_subsystem = container "Lifecycle Assessment Subsystem" { tags "extend" properties { "fr" "5.4,7.4" } technology "Python" description "Tool for parsing LCA results for providing visual representation of environmental impact" lca_api = component "LCA API" { technology "Python" description "API for lifecycle assessment operations" } lca_parser = component "LCA Parser" { technology "Python" description "Service for parsing LCA results" } lca_dataset = component "LCA Dataset" { technology "Excel" description "LCA dataset for environmental impact assessment" } } object_storage = container "Centralized Asset Storage" { properties { "fr" "2.1,6.1,6.2,6.5,7.4" } technology "S3" description "Centralized storage for digital assets" } relational_database = container "Relational Database" { tags "extend" properties { "fr" "2.1" } technology "PostgreSQL" description "Database for storing structured data" } authentication_authorization = container "Authentication and Authorization" { tags "extend" properties { "fr" "6.1,6.2" } technology "Keycloak" description "Centralized authentication and authorization service" } search_engine = container "Search Engine" { tags "extend" properties { "fr" "5.3" } technology "Apache Solr" description "Search engine for indexing and searching digital assets" } git = container "Git" { tags "extend" properties { "fr" "4.1,6.3" } technology "Gitea" description "Version control system for managing code" } data_integration_subsystem = container "Data Integration Subsystem" { tags "integration" technology "Python" description "Service for integrating data from distributed nodes" properties { "fr" "6.4,7.1,7.2" } data_integration_service = component "Data Integration Service" { technology "Python" description "Service for integrating data from external sources" } data_integration_registry = component "Node Registry" { technology "Python" description "Registry for distributed DKMP nodes" } data_integration_api = component "Data Integration API" { technology "Python" description "API for integrating data from external sources" } } } //dkmp distributed node dkmp_distributed_node = softwareSystem "DKMP decentralised node" { tags "integration" "internal" description "Decentralised node for private data management" properties { "hints" "DKMP stands for Data and Knowledge Management Platform. The decentralised node is used for storing private assets withing the organisation infrastructure." } reverse_proxy = container "Reverse Proxy" { technology "Nginx" description "Reverse proxy for routing requests to the appropriate services" } drupal_framework = container "Drupal" { technology "Drupal 10, PHP 8, JavaScript" description "Drupal with custom extensions" drupal_core = component "Drupal Core" { technology "Drupal 10" properties { "fr" "6.3" } description "Drupal core functionality" tags "core_extend" } access_management_module = component "Access Management" { properties { "fr" "6.1,6.2,6.4" } technology "PHP" description "Manages access to digital assets" -> drupal_core "Manages access to digital assets" "" "core_extend" } } data_integration_subsystem = container "Data Integration Subsystem" { tags "integration" properties { "fr" "6.4,7.1,7.2" } technology "Python" description "Service for integrating data with centralised nodes" data_integration_service = component "Data Integration Service" { technology "Python" description "Service for integrating data with centralised nodes" } data_integration_registry = component "Node Registry" { technology "Python" description "Registry for centralised DKMP nodes" } data_integration_api = component "Data Integration API" { technology "Python" description "Data integration API for interaction with the central node" } data_integration_event_consumer = component "Data Integration Event Consumer" { technology "Python" description "Event consumer for integrating data with centralised node" } } metadata_parsing_subsystem = container "Metadata Parsing Subsystem" { technology "Python" description "Service for parsing metadata from digital assets" properties { "fr" "1.1,1.2,1.4,3.1,3.5" } metadata_parser_api = component "Metadata Parser API" { technology "Python" description "API for parsing metadata from digital assets" } metadata_parser_engine = component "Metadata Parser Engine" { technology "Python" description "Service for for running metadata parsers from registry" } metadata_parser_registry = component "Metadata Parser Registry" { technology "Python" description "Registry for metadata parsers" } metadata_validator = component "Metadata Validator" { technology "Python" description "Service for validating metadata" } } data_enrichment_subsystem = container "Data Enrichment Subsystem" { properties { "fr" "1.3" } technology "Python" description "Service for enriching digital assets with additional data" data_enrichment_engine = component "Data Enrichment Engine" { technology "Python" description "Engine for enriching digital assets with additional data" } data_enrichment_registry = component "Data Enrichment Registry" { technology "Python" description "Registry for data enrichment services" } data_enrichment_api = component "Data Enrichment API" { technology "Python" description "API for enriching digital assets with additional data" } } object_storage = container "Distributed Asset Storage" { properties { "fr" "2.1,6.3" } technology "S3" description "Distributed storage for private digital assets" } relational_database = container "Relational Database" { properties { "fr" "2.1" } technology "PostgreSQL" description "Database for storing structured data" } } // Relations for the central node //Manages access dkmp_central_node.drupal_framework.access_management_module -> dkmp_central_node.authentication_authorization "Manages users and roles" { properties { } } dkmp_central_node.drupal_framework.access_management_module -> dkmp_central_node.event_subsystem "Adds access grants to the message queue" { properties { } } //Manage forms dkmp_central_node.drupal_framework.asset_entity_manager_module -> dkmp_central_node.ontology_subsystem.ontology_api "Retrieves ontology constraints for form validation" { properties { } } //Manages rabbit dkmp_central_node.drupal_framework.event_management_module -> dkmp_central_node.event_subsystem "Manages queues for asynchronous communication" { properties { } } // //Upload large files to object storage // dkmp_central_node.drupal_framework.large_file_upload_module -> dkmp_central_node.object_storage "Uploads large files directly to storage in a centralised node" { properties { } } dkmp_central_node.drupal_framework.large_file_upload_module -> dkmp_central_node.data_integration_subsystem.data_integration_api "Uploads large files to storage in a distributed node or uses temporary storage for exchange" { properties { } } // // // //Unit converter dkmp_central_node.drupal_framework.unit_widget_module -> dkmp_central_node.ontology_subsystem.ontology_api "Retrieves unit conversion data from ontology" { properties { } } //Delete file from object storage if time elapsed dkmp_central_node.drupal_framework.temporary_file_storage_module -> dkmp_central_node.object_storage "Deletes files from storage if time elapsed" { properties { } } //Event consumer dkmp_central_node.event_subsystem.event_consumer -> dkmp_central_node.event_subsystem.rabbitmq "Consumes messages from the message broker" { properties { } } dkmp_central_node.event_subsystem.event_consumer -> dkmp_central_node.drupal_framework.dkmp_api_module "Triggers message processing via API" { properties { } } // //Metadata parsing and validation through authoring module // dkmp_central_node.drupal_framework.metadata_authoring_module -> dkmp_central_node.metadata_parsing_subsystem.metadata_parser_api "Retrieves metadata for a digital asset" { properties { } } dkmp_central_node.metadata_parsing_subsystem.metadata_parser_api -> dkmp_central_node.metadata_parsing_subsystem.metadata_parser_registry "Locates a suitable metadata parser" { properties { } } dkmp_central_node.metadata_parsing_subsystem.metadata_parser_api -> dkmp_central_node.metadata_parsing_subsystem.metadata_parser_engine "Initialised metadata parser" { properties { } } dkmp_central_node.metadata_parsing_subsystem.metadata_parser_engine -> dkmp_central_node.object_storage "Loads the file for metadata parsing" { properties { } } dkmp_central_node.metadata_parsing_subsystem.metadata_parser_engine -> dkmp_central_node.metadata_parsing_subsystem.metadata_validator "Validates metadata against ontology constraints" { properties { } } dkmp_central_node.metadata_parsing_subsystem.metadata_validator -> dkmp_central_node.ontology_subsystem.ontology_api "Retrieves ontology constraints for metadata validation" { properties { } } // // // //Ensure Asset Indexing interacts with Search Engine dkmp_central_node.drupal_framework.asset_indexing_discovery_module -> dkmp_central_node.search_engine "Performs asset indexing and search" { properties { } } dkmp_central_node.drupal_framework.asset_visualisation_module -> dkmp_central_node.ontology_subsystem.ontology_api "Load additional data from ontology for visualization" { properties { } } // // // // //Ontology subsystem interactions // dkmp_central_node.ontology_subsystem.ontology_api -> dkmp_central_node.ontology_subsystem.ontology_manager "Performs operations on the ontology" { properties { } } dkmp_central_node.ontology_subsystem.ontology_manager -> dkmp_central_node.sparql_server "Queries the SPARQL server for constraints, ontology data and unit conversion" { properties { } } // // // // //LCA module interaction with subsystem // dkmp_central_node.drupal_framework.lca_module -> dkmp_central_node.lca_subsystem.lca_api "Requests lifecycle assessments" { properties { } } dkmp_central_node.lca_subsystem.lca_api -> dkmp_central_node.lca_subsystem.lca_parser "Requests parsing of lifecycle assessment results" { properties { } } dkmp_central_node.lca_subsystem.lca_parser -> dkmp_central_node.lca_subsystem.lca_dataset "Parses lifecycle assessment results" { properties { } } // // // // //Moda Chada functionality // dkmp_central_node.drupal_framework.chada_moda_module -> dkmp_central_node.chada_moda_subsystem.chada_moda_renderer_api "Requests rendering of CHADA MODA models" { properties { } } dkmp_central_node.chada_moda_subsystem.chada_moda_renderer_api -> dkmp_central_node.chada_moda_subsystem.chada_moda_renderer "Renders CHADA MODA models" { properties { } } dkmp_central_node.chada_moda_subsystem.chada_moda_renderer -> dkmp_central_node.chada_moda_subsystem.plantuml_renderer "Renders PlantUML diagrams" { properties { } } // //GIt functionality // dkmp_central_node.drupal_framework.software_artefact_manager_module -> dkmp_central_node.git "Manages source code for digital assets" { properties { } } // /////Authentication and Authorization // dkmp_central_node.authentication_authorization -> dkmp_central_node.drupal_framework "Manages user authentication and access control for Drupal" { } // // // // //Data enrichment // dkmp_central_node.drupal_framework.data_enrichment_module -> dkmp_central_node.data_enrichment_subsystem.data_enrichment_api "Enriches data with additional information" { properties { } } dkmp_central_node.data_enrichment_subsystem.data_enrichment_api -> dkmp_central_node.data_enrichment_subsystem.data_enrichment_registry "Locates a suitable data enrichment service" { properties { } } dkmp_central_node.data_enrichment_subsystem.data_enrichment_api -> dkmp_central_node.data_enrichment_subsystem.data_enrichment_engine "Initialised data enrichment service" { properties { } } dkmp_central_node.data_enrichment_subsystem.data_enrichment_engine -> dkmp_central_node.object_storage "Loads the file for enrichment" { properties { } } // // // // //Asset publishing // dkmp_central_node.drupal_framework.asset_publishing_module -> dkmp_central_node.asset_publishing_subsystem.publisher_api "Publishes digital assets" { properties { } } dkmp_central_node.asset_publishing_subsystem.publisher_api -> dkmp_central_node.asset_publishing_subsystem.publisher_registry "Locates a suitable publisher" { properties { } } dkmp_central_node.asset_publishing_subsystem.publisher_api -> dkmp_central_node.asset_publishing_subsystem.asset_publisher_engine "Initialised asset publisher" { properties { } } dkmp_central_node.asset_publishing_subsystem.asset_publisher_engine -> open_research_repo "Publishes assets to the Open Research Repository" { properties { } } // // // // //Data integration cases // dkmp_central_node.data_integration_subsystem.data_integration_api -> dkmp_central_node.data_integration_subsystem.data_integration_registry "Locates metadata for the distributed node" { properties { } } dkmp_central_node.data_integration_subsystem.data_integration_api -> dkmp_central_node.data_integration_subsystem.data_integration_service "Initialised data integration service" { properties { } } //Case with temporary storage dkmp_central_node.data_integration_subsystem.data_integration_service -> dkmp_central_node.drupal_framework.temporary_file_storage_module "Stores files temporarily for exchange" { properties { } } dkmp_central_node.data_integration_subsystem.data_integration_service -> dkmp_central_node.event_subsystem "Sends message for the distributed node about new files" { properties { } } dkmp_central_node.event_subsystem -> dkmp_distributed_node.data_integration_subsystem.data_integration_event_consumer "Transmits a messagee about new files or access grants" { properties { } } dkmp_distributed_node.data_integration_subsystem.data_integration_event_consumer -> dkmp_distributed_node.data_integration_subsystem.data_integration_registry "Locates information about the central node" { properties { } } dkmp_distributed_node.data_integration_subsystem.data_integration_event_consumer -> dkmp_distributed_node.data_integration_subsystem.data_integration_service "Initialised data integration service" { properties { } } dkmp_distributed_node.data_integration_subsystem.data_integration_service -> dkmp_central_node.object_storage "Retrieves files from the central node, uploads files for exchange, access grant results" { properties { } } // dkmp_distributed_node.data_integration_subsystem.data_integration_service -> dkmp_distributed_node.relational_database "Stores asset metadata locally" { // properties { // } // } dkmp_distributed_node.data_integration_subsystem.data_integration_service -> dkmp_distributed_node.object_storage "Stores digital assets locally permanently" { properties { } } // Case with access to distributed node dkmp_central_node.data_integration_subsystem.data_integration_service -> dkmp_distributed_node.object_storage "Stores files temporarily for exchange" { properties { } } //Case with access grant to distributed node dkmp_distributed_node.data_integration_subsystem.data_integration_service -> dkmp_distributed_node.drupal_framework.access_management_module "Adds a new access grant for reviewal" { properties { } } dkmp_distributed_node.drupal_framework.access_management_module -> dkmp_distributed_node.data_integration_subsystem.data_integration_api "Access grant confirmed or rejected" { properties { } } dkmp_distributed_node.data_integration_subsystem.data_integration_api -> dkmp_distributed_node.data_integration_subsystem.data_integration_registry "Locates information about the central node" { properties { } } dkmp_distributed_node.data_integration_subsystem.data_integration_api -> dkmp_distributed_node.data_integration_subsystem.data_integration_service "Initialised data integration service" { properties { } } // //Distributed node trigger data enrichment // dkmp_distributed_node.data_integration_subsystem.data_integration_service -> dkmp_distributed_node.data_enrichment_subsystem.data_enrichment_api "Requests data enrichment" { properties { } } dkmp_distributed_node.data_enrichment_subsystem.data_enrichment_api -> dkmp_distributed_node.data_enrichment_subsystem.data_enrichment_registry "Locates a suitable data enrichment service" { properties { } } dkmp_distributed_node.data_enrichment_subsystem.data_enrichment_api -> dkmp_distributed_node.data_enrichment_subsystem.data_enrichment_engine "Initialised data enrichment service" { properties { } } dkmp_distributed_node.data_enrichment_subsystem.data_enrichment_engine -> dkmp_distributed_node.object_storage "Loads the file for enrichment" { properties { } } // // // // //Distributed node triggers metadata parsing // dkmp_distributed_node.data_integration_subsystem.data_integration_service -> dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_api "Requests metadata parsing" { properties { } } dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_api -> dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_registry "Locates a suitable metadata parser" { properties { } } dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_api -> dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_engine "Initialised metadata parser" { properties { } } dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_engine -> dkmp_distributed_node.object_storage "Loads the file for metadata parsing" { properties { } } dkmp_distributed_node.metadata_parsing_subsystem.metadata_parser_engine -> dkmp_distributed_node.metadata_parsing_subsystem.metadata_validator "Validates metadata against ontology constraints" { properties { } } dkmp_distributed_node.metadata_parsing_subsystem.metadata_validator -> dkmp_central_node.drupal_framework.dkmp_api_module "Retrieves ontology constraints for metadata validation" { properties { } } // //User relations // platformAdmin -> dkmp_central_node.authentication_authorization "Manages users and roles" { properties { } } platformAdmin -> dkmp_central_node.sparql_server "Updates ontology" { properties { } } assetOwner -> dkmp_central_node.drupal_framework "Publishes assets and manages access" { tags "asset_ownner_lvl1" properties { } } assetOwner -> dkmp_central_node.drupal_framework.asset_publishing_module "Publishes assets" { tags "asset_ownner_lvl2" properties { } } assetOwner -> dkmp_central_node.drupal_framework.access_management_module "Manages access to assets" { tags "asset_ownner_lvl2" properties { } } assetViewer -> dkmp_central_node.drupal_framework.drupal_core "Views assets" { properties { } } dgo -> dkmp_distributed_node.drupal_framework.access_management_module "Sets up access rules, accepts/denies access grants" { properties { } } // // Relational database // dkmp_central_node.drupal_framework -> dkmp_central_node.relational_database "Stores data for the Drupal framework" { properties { } } dkmp_central_node.authentication_authorization -> dkmp_central_node.relational_database "Stores user data" { properties { } } dkmp_distributed_node.drupal_framework -> dkmp_distributed_node.relational_database "Stores data for the Drupal framework" { properties { } } } views { styles { element external { background #CCBE00 color #ffffff } element internal { background #00AC4D color #ffffff } relationship "VirtualRelation" { thickness 1 color #22cc22 style dotted routing Curved } element "Person" { shape Person background #1168bd color #ffffff } element Component { strokeWidth 3 background #C9F1F5 stroke #000000 border solid } element Container { stroke #000000 strokeWidth 4 background #51BED4 } element "Existing System" { color #ffffff background #999999 } element "Software System" { background #1168bd color #ffffff stroke #000000 strokeWidth 4 } } terminology { person "User" softwareSystem "Software System" container "Container" component "Component" relationship "Relationship" } properties { "structurizr.timezone" "Europe/Riga" } systemLandscape SL01 { title "System Landscape" include * // autoLayout } systemContext dkmp_central_node { title "DKMP central node Context Diagram" include * autoLayout } container dkmp_central_node { title "DKMP central node Container Diagram" include * exclude "element.tag==asset_owner_lvl2" // autoLayout } systemContext dkmp_distributed_node { title "DKMP decentralised node Context Diagram" include * autoLayout } container dkmp_distributed_node { title "DKMP decentralised node Container Diagram" include * // autoLayout } component dkmp_central_node.drupal_framework { title "Drupal Central Node Component Diagram Without Integration" // description "The diagram illustrates extension of the Drupal core with custom" // include "element.tag==core_extend" include * exclude "element.tag==integration" } component dkmp_central_node.drupal_framework { title "Drupal Central Node Component Diagram Integration View" include * exclude "element.tag==extend" } // component dkmp_central_node.drupal_framework { // title "Drupal Component Diagram" // include * // // exclude element.tag!="core_extend" // autoLayout // } component dkmp_central_node.event_subsystem { title "Event Subsystem Component Diagram" include * autoLayout } component dkmp_central_node.metadata_parsing_subsystem { title "Metadata Parsing Subsystem Component Diagram" include * // autoLayout } component dkmp_central_node.data_enrichment_subsystem { title "Data Enrichment Subsystem Component Diagram" include * // autoLayout } component dkmp_central_node.asset_publishing_subsystem { title "Asset Publishing Subsystem Component Diagram" include * // autoLayout } component dkmp_central_node.chada_moda_subsystem { title "CHADA MODA Subsystem Component Diagram" include * // autoLayout } component dkmp_central_node.ontology_subsystem { title "Ontology Subsystem Component Diagram" include * // autoLayout } component dkmp_central_node.lca_subsystem { title "Lifecycle Assessment Subsystem Component Diagram" include * // autoLayout } component dkmp_central_node.data_integration_subsystem { title "Central Node Data Integration Subsystem Component Diagram" include * // autoLayout } component dkmp_distributed_node.drupal_framework { title "Distributed Node Drupal Component Diagram" include * // autoLayout } component dkmp_distributed_node.data_integration_subsystem { title "Distributed Node Data Integration Subsystem Component Diagram" include * // autoLayout } component dkmp_distributed_node.metadata_parsing_subsystem { title "Distributed Node Metadata Parsing Subsystem Component Diagram" include * // autoLayout } component dkmp_distributed_node.data_enrichment_subsystem { title "Distributed Node Data Enrichment Subsystem Component Diagram" include * // autoLayout } dynamic * { title "Grant access to a distributed node resource via temporary storage" description "The user grants access to a resource to a distributed node. The distributed node uploads the resource to a temporary storage in the central node." assetOwner -> dkmp_central_node "Shares resource from a distributed node" dkmp_central_node -> dkmp_distributed_node "Register acces grant in the distributed node" dgo -> dkmp_distributed_node "Accepts access grant" dkmp_distributed_node -> dkmp_central_node "Uploads resource to temporary storage" assetViewer -> dkmp_central_node "Views asset from temporary storage" // autoLayout } dynamic * { title "Grant access to a distributed node resource via proxy" description "The user grants access to a resource to a distributed node. The distributed node shares access url with the central node." assetOwner -> dkmp_central_node "Shares resource from a distributed node" dkmp_central_node -> dkmp_distributed_node "Register acces grant in the distributed node" dgo -> dkmp_distributed_node "Accepts access grant" dkmp_distributed_node -> dkmp_central_node "Sends access URL" assetViewer -> dkmp_central_node "Views asset via central node as a proxy" // autoLayout } } }