Commit fb5e6c1c authored by Martin Necasky's avatar Martin Necasky
Browse files

Projects for practical lectures

parent 2a1aa641
## Roadmap
This document describes the architecture of the National Open Data Catalog (NODC).
It is intended for primarily for the NODC development team and secondary for the publishers who operate their own local open data catalogs harvested by NODC.
\ No newline at end of file
## Context
NODC stores metadata records about all open data sets published by individual open data publishers in Czechia and enables open data consumers to search for metadata records and view their details.
Open data publishers do not register metadata records about their data sets directly to NODC.
They operate their own local open data catalogs where they manage their records.
NODC harvests the records from the local catalogs registered in the registry of local open data catalogs on a regular basis (daily).
European Open Data Catalog uses NODC as a single source of truth about open data sets in Czechia.
![](embed:nationalCatalogSystemContextDiagram)
\ No newline at end of file
#
#Tue Sep 28 16:14:17 UTC 2021
eula-20210622=true
2021-09-28 16:13:50,620 INFO [ContextLoaderListener] ***********************************************************************************
2021-09-28 16:13:50,622 INFO [ContextLoaderListener] _____ _ _ _
2021-09-28 16:13:50,623 INFO [ContextLoaderListener] / ____| | | | (_)
2021-09-28 16:13:50,624 INFO [ContextLoaderListener] | (___ | |_ _ __ _ _ ___| |_ _ _ _ __ _ _____ __
2021-09-28 16:13:50,625 INFO [ContextLoaderListener] \___ \| __| '__| | | |/ __| __| | | | '__| |_ / '__|
2021-09-28 16:13:50,626 INFO [ContextLoaderListener] ____) | |_| | | |_| | (__| |_| |_| | | | |/ /| |
2021-09-28 16:13:50,627 INFO [ContextLoaderListener] |_____/ \__|_| \__,_|\___|\__|\__,_|_| |_/___|_|
2021-09-28 16:13:50,627 INFO [ContextLoaderListener]
2021-09-28 16:13:50,628 INFO [ContextLoaderListener] Structurizr Lite
2021-09-28 16:13:50,631 INFO [ContextLoaderListener] Build: 2502
2021-09-28 16:13:50,634 INFO [ContextLoaderListener] Built: 2021-09-23T12:00:29Z
2021-09-28 16:13:50,666 INFO [ContextLoaderListener] Structurizr DSL: v1.14.0
2021-09-28 16:13:50,667 INFO [ContextLoaderListener]
2021-09-28 16:13:50,668 INFO [ContextLoaderListener] Memory: used=58MB; free=197MB; total=256MB; max=256MB
2021-09-28 16:13:50,668 INFO [ContextLoaderListener] ***********************************************************************************
2021-09-28 16:14:17,289 ERROR [FileSystemWorkspaceComponent] com.structurizr.dsl.StructurizrDslParserException: The software system "storage" does not exist at line 17: systemContext storage "storageSystemContextDiagram" {
2021-09-28 16:23:19,852 WARN [View] There is no layout information for the element named Local Open Data Catalog on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:19,853 WARN [View] There is no layout information for the element named European Open Data Catalog on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:19,853 WARN [View] There is no layout information for the element named Consumer on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:19,854 WARN [View] There is no layout information for the element named Publisher on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:20,376 WARN [View] There is no layout information for the element named Local Open Data Catalog on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:20,377 WARN [View] There is no layout information for the element named European Open Data Catalog on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:20,378 WARN [View] There is no layout information for the element named Consumer on view nationalCatalogSystemContextDiagram
2021-09-28 16:23:20,378 WARN [View] There is no layout information for the element named Publisher on view nationalCatalogSystemContextDiagram
2021-09-28 17:32:36,150 WARN [ViewSet] Could not find a matching view for "Czech National Open Data Catalog (NODC) - Containers" ... diagram layout information may be lost.
2021-09-28 17:32:36,511 WARN [ViewSet] Could not find a matching view for "Czech National Open Data Catalog (NODC) - Containers" ... diagram layout information may be lost.
2021-09-28 17:41:36,887 WARN [View] There is no layout information for the element named Consumer on view nationalCatalogContainerDiagram
2021-09-28 17:46:28,253 WARN [View] There is no layout information for the element named Metadata Harvestor on view nationalCatalogContainerDiagram
2021-09-28 17:46:28,255 WARN [View] There is no layout information for the element named Local Open Data Catalog on view nationalCatalogContainerDiagram
2021-09-28 17:46:28,624 WARN [View] There is no layout information for the element named Metadata Harvestor on view nationalCatalogContainerDiagram
2021-09-28 17:46:28,626 WARN [View] There is no layout information for the element named Local Open Data Catalog on view nationalCatalogContainerDiagram
2021-09-28 17:53:20,769 WARN [View] There is no layout information for the element named Registry of local open data catalogs on view nationalCatalogSystemContextDiagram
2021-09-28 17:53:21,052 WARN [View] There is no layout information for the element named Registry of local open data catalogs on view nationalCatalogSystemContextDiagram
2021-09-28 17:56:44,260 ERROR [FileSystemWorkspaceComponent] com.structurizr.dsl.StructurizrDslParserException: The element/relationship "*," does not exist at line 75: include *, publisher
2021-09-28 17:59:49,908 WARN [View] There is no layout information for the element named Registry of local open data catalogs on view nationalCatalogContainerDiagram
2021-09-28 17:59:50,185 WARN [View] There is no layout information for the element named Registry of local open data catalogs on view nationalCatalogContainerDiagram
2021-09-28 18:18:50,369 WARN [ViewSet] Could not find a matching view for "Czech National Open Data Catalog (NODC) - NODC Server - Components" ... diagram layout information may be lost.
2021-09-28 18:18:50,724 WARN [ViewSet] Could not find a matching view for "Czech National Open Data Catalog (NODC) - NODC Server - Components" ... diagram layout information may be lost.
2021-09-28 18:30:15,198 WARN [View] There is no layout information for the element named Metadata Index on view serverComponentDiagram
2021-09-28 18:30:15,199 WARN [View] There is no layout information for the element named Metadata Storage on view serverComponentDiagram
2021-09-28 18:30:15,199 WARN [View] There is no layout information for the element named NODC Web Front-end on view serverComponentDiagram
2021-09-28 18:30:15,464 WARN [View] There is no layout information for the element named Metadata Index on view serverComponentDiagram
2021-09-28 18:30:15,464 WARN [View] There is no layout information for the element named Metadata Storage on view serverComponentDiagram
2021-09-28 18:30:15,465 WARN [View] There is no layout information for the element named NODC Web Front-end on view serverComponentDiagram
workspace "Public Data Space" "This workspace documents the architecture of the Public Data Space which enables public institutions in Czechia to share public data among each other in a guaranteed way." {
model {
nationalCatalog = softwareSystem "Czech National Open Data Catalog (NODC)" "Stores and presents metadata records about data sets and harvests meta data from local open data catalogs." {
webFrontend = container "NODC Web Front-end" "Provides all functionality for browsing and viewing metadata records to open data consumers via their web browser" {
}
server = container "NODC Server" "Implements all business functionality for browsing and viewing metadata records and provides it via a JSON/HTTPS API." {
listAPI = component "Record List API" "Provides API for getting a list of metadata records according to specified search parameters via a JSON/HTTPS API."
detailAPI = component "Record Detail API" "Provides API for getting a detail of a given metadata record via a JSON/HTTPS API."
searchController = component "Records Search Controller" "Implements and provides business functionality related to searching for metadata records"
detailController = component "Record Detail Controller" "Implements and provides business functionality related to viewing details of metadata records"
distributionModel = component "Distribution Model" "Internal model of distribution metadata"
datasetModel = component "Dataset Model" "Internal model of dataset metadata"
recordIndexGateway = component "Metadata Index Gateway" "Provides access to a metadata records index"
recordDetailGateway = component "Metadata Detail Gateway" "Provides access to a metadata records store"
codeListAccess = component "Code List Gateway" "Provides access to code lists and their items via HTTPS dereferencing Web IRIs."
}
recordIndex = container "Metadata Index" "Index for fast searching in metadata records" "Apache SOLR via JSON/HTTPS"
recordStorage = container "Metadata Storage" "Storage of metadata records" "CouchDB via JSON/HTTPS"
harvestor = container "Metadata Harvestor" "Harvests metadata records from local open data catalogs" "LinkedPipes ETL"
!docs docs
}
localCatalog = softwareSystem "Local Open Data Catalog" "Stores metadata records about data sets of a given provider and provides API for national open data catalog." "Existing System"
euCatalog = softwareSystem "European Open Data Catalog" "Stores and presents metadata records about data sets from different EU countires and harvests meta data from national open data catalogs." "Existing System"
localCatalogRegistry = softwareSystem "Registry of local open data catalogs" "SPARQL endpoint for reading locations of registered local open data catalogs which need to be harvested." "Existing System"
consumer = person "Consumer" "An actor who searches for data sets and accesses them for various purposes." "Consumer"
# relationships to/from software systems
consumer -> nationalCatalog "Searchers for metadata records in"
consumer -> euCatalog "Searchers for metadata records in"
nationalCatalog -> localCatalog "Harvests metada records from"
euCatalog -> nationalCatalog "Harvests metadata records from"
nationalCatalog -> localCatalogRegistry "Reads registered local open data catalogs from"
localCatalog -> localCatalogRegistry "Is registered in"
# relationships to/from containers
consumer -> webFrontend "Searches for metadata records and views their details with"
webFrontend -> server "Uses to deliver functionality"
server -> recordIndex "Uses for fast retrieval of metadata records lists"
server -> recordStorage "Uses for fast retrieval of metadata records details"
harvestor -> localCatalog "Harvests metadata records from"
harvestor -> recordIndex "Uses to reset metadata records index. The whole index is always replaced"
harvestor -> recordStorage "Uses to persists harvested metadata records. All records are always replaced"
harvestor -> localCatalogRegistry "Uses to read locations of registered local open data catalogs"
# relationships to/from components
webFrontend -> listAPI "Makes API calls to" "JSON/HTTPS"
webFrontend -> detailAPI "Makes API calls to" "JSON/HTTPS"
listAPI -> searchController "Uses to access search business functionality"
detailAPI -> detailController "Uses to access detail business functionality"
searchController -> datasetModel "Uses to access metadata about datasets"
detailController -> datasetModel "Uses to access metadata about datasets"
detailController -> distributionModel "Uses to access metadata about distributions"
datasetModel -> recordIndexGateway "Uses to retrieve list of metadata records with given values of selected properties"
datasetModel -> recordDetailGateway "Uses to retrieve detailed metadata"
distributionModel -> recordDetailGateway "Uses to retrieve detailed metadata"
datasetModel -> codeListAccess "Uses to retrieve code list items labels and descriptions"
distributionModel -> codeListAccess "Uses to retrieve code list items labels and descriptions"
recordIndexGateway -> recordIndex "Provides access to"
recordDetailGateway -> recordStorage "Provides access to"
}
views {
systemContext nationalCatalog "nationalCatalogSystemContextDiagram" {
include *
}
container nationalCatalog "nationalCatalogContainerDiagram" {
include *
}
component server "serverComponentDiagram" {
include *
}
theme default
styles {
element "Existing System" {
background #999999
color #ffffff
}
element "Consumer" {
background #999999
color #ffffff
}
}
}
\ No newline at end of file
{
"id" : 1,
"name" : "Public Data Space",
"description" : "This workspace documents the architecture of the Public Data Space which enables public institutions in Czechia to share public data among each other in a guaranteed way.",
"revision" : 0,
"lastModifiedDate" : "2021-09-28T19:01:22Z",
"lastModifiedAgent" : "structurizr-web/2502",
"properties" : {
"structurizr.dsl" : "d29ya3NwYWNlICJQdWJsaWMgRGF0YSBTcGFjZSIgIlRoaXMgd29ya3NwYWNlIGRvY3VtZW50cyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBQdWJsaWMgRGF0YSBTcGFjZSB3aGljaCBlbmFibGVzIHB1YmxpYyBpbnN0aXR1dGlvbnMgaW4gQ3plY2hpYSB0byBzaGFyZSBwdWJsaWMgZGF0YSBhbW9uZyBlYWNoIG90aGVyIGluIGEgZ3VhcmFudGVlZCB3YXkuIiB7CgogICAgbW9kZWwgewogICAgICAgIG5hdGlvbmFsQ2F0YWxvZyA9IHNvZnR3YXJlU3lzdGVtICJDemVjaCBOYXRpb25hbCBPcGVuIERhdGEgQ2F0YWxvZyAoTk9EQykiICJTdG9yZXMgYW5kIHByZXNlbnRzIG1ldGFkYXRhIHJlY29yZHMgYWJvdXQgZGF0YSBzZXRzIGFuZCBoYXJ2ZXN0cyBtZXRhIGRhdGEgZnJvbSBsb2NhbCBvcGVuIGRhdGEgY2F0YWxvZ3MuIiAgewogICAgICAgICAgICB3ZWJGcm9udGVuZCA9IGNvbnRhaW5lciAiTk9EQyBXZWIgRnJvbnQtZW5kIiAiUHJvdmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgZm9yIGJyb3dzaW5nIGFuZCB2aWV3aW5nIG1ldGFkYXRhIHJlY29yZHMgdG8gb3BlbiBkYXRhIGNvbnN1bWVycyB2aWEgdGhlaXIgd2ViIGJyb3dzZXIiICB7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlcnZlciA9IGNvbnRhaW5lciAiTk9EQyBTZXJ2ZXIiICJJbXBsZW1lbnRzIGFsbCBidXNpbmVzcyBmdW5jdGlvbmFsaXR5IGZvciBicm93c2luZyBhbmQgdmlld2luZyBtZXRhZGF0YSByZWNvcmRzIGFuZCBwcm92aWRlcyBpdCB2aWEgYSBKU09OL0hUVFBTIEFQSS4iICAgIHsKICAgICAgICAgICAgICAgIGxpc3RBUEkgPSBjb21wb25lbnQgIlJlY29yZCBMaXN0IEFQSSIgIlByb3ZpZGVzIEFQSSBmb3IgZ2V0dGluZyBhIGxpc3Qgb2YgbWV0YWRhdGEgcmVjb3JkcyBhY2NvcmRpbmcgdG8gc3BlY2lmaWVkIHNlYXJjaCBwYXJhbWV0ZXJzIHZpYSBhIEpTT04vSFRUUFMgQVBJLiIKICAgICAgICAgICAgICAgIGRldGFpbEFQSSA9IGNvbXBvbmVudCAiUmVjb3JkIERldGFpbCBBUEkiICJQcm92aWRlcyBBUEkgZm9yIGdldHRpbmcgYSBkZXRhaWwgb2YgYSBnaXZlbiBtZXRhZGF0YSByZWNvcmQgdmlhIGEgSlNPTi9IVFRQUyBBUEkuIgogICAgICAgICAgICAgICAgc2VhcmNoQ29udHJvbGxlciA9IGNvbXBvbmVudCAiUmVjb3JkcyBTZWFyY2ggQ29udHJvbGxlciIgIkltcGxlbWVudHMgYW5kIHByb3ZpZGVzIGJ1c2luZXNzIGZ1bmN0aW9uYWxpdHkgcmVsYXRlZCB0byBzZWFyY2hpbmcgZm9yIG1ldGFkYXRhIHJlY29yZHMiCiAgICAgICAgICAgICAgICBkZXRhaWxDb250cm9sbGVyID0gY29tcG9uZW50ICJSZWNvcmQgRGV0YWlsIENvbnRyb2xsZXIiICJJbXBsZW1lbnRzIGFuZCBwcm92aWRlcyBidXNpbmVzcyBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gdmlld2luZyBkZXRhaWxzIG9mIG1ldGFkYXRhIHJlY29yZHMiCiAgICAgICAgICAgICAgICBkaXN0cmlidXRpb25Nb2RlbCA9IGNvbXBvbmVudCAiRGlzdHJpYnV0aW9uIE1vZGVsIiAiSW50ZXJuYWwgbW9kZWwgb2YgZGlzdHJpYnV0aW9uIG1ldGFkYXRhIgogICAgICAgICAgICAgICAgZGF0YXNldE1vZGVsID0gY29tcG9uZW50ICJEYXRhc2V0IE1vZGVsIiAiSW50ZXJuYWwgbW9kZWwgb2YgZGF0YXNldCBtZXRhZGF0YSIKICAgICAgICAgICAgICAgIHJlY29yZEluZGV4R2F0ZXdheSA9IGNvbXBvbmVudCAiTWV0YWRhdGEgSW5kZXggR2F0ZXdheSIgIlByb3ZpZGVzIGFjY2VzcyB0byBhIG1ldGFkYXRhIHJlY29yZHMgaW5kZXgiCiAgICAgICAgICAgICAgICByZWNvcmREZXRhaWxHYXRld2F5ID0gY29tcG9uZW50ICJNZXRhZGF0YSBEZXRhaWwgR2F0ZXdheSIgIlByb3ZpZGVzIGFjY2VzcyB0byBhIG1ldGFkYXRhIHJlY29yZHMgc3RvcmUiCiAgICAgICAgICAgICAgICBjb2RlTGlzdEFjY2VzcyA9IGNvbXBvbmVudCAiQ29kZSBMaXN0IEdhdGV3YXkiICJQcm92aWRlcyBhY2Nlc3MgdG8gY29kZSBsaXN0cyBhbmQgdGhlaXIgaXRlbXMgdmlhIEhUVFBTIGRlcmVmZXJlbmNpbmcgV2ViIElSSXMuIgogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZWNvcmRJbmRleCA9IGNvbnRhaW5lciAiTWV0YWRhdGEgSW5kZXgiICJJbmRleCBmb3IgZmFzdCBzZWFyY2hpbmcgaW4gbWV0YWRhdGEgcmVjb3JkcyIgIkFwYWNoZSBTT0xSIHZpYSBKU09OL0hUVFBTIgogICAgICAgICAgICByZWNvcmRTdG9yYWdlID0gY29udGFpbmVyICJNZXRhZGF0YSBTdG9yYWdlIiAiU3RvcmFnZSBvZiBtZXRhZGF0YSByZWNvcmRzIiAiQ291Y2hEQiB2aWEgSlNPTi9IVFRQUyIKCiAgICAgICAgICAgIGhhcnZlc3RvciA9IGNvbnRhaW5lciAiTWV0YWRhdGEgSGFydmVzdG9yIiAiSGFydmVzdHMgbWV0YWRhdGEgcmVjb3JkcyBmcm9tIGxvY2FsIG9wZW4gZGF0YSBjYXRhbG9ncyIgIkxpbmtlZFBpcGVzIEVUTCIKCiAgICAgICAgICAgICFkb2NzIGRvY3MKCiAgICAgICAgfQoKICAgICAgICBsb2NhbENhdGFsb2cgPSBzb2Z0d2FyZVN5c3RlbSAiTG9jYWwgT3BlbiBEYXRhIENhdGFsb2ciICJTdG9yZXMgbWV0YWRhdGEgcmVjb3JkcyBhYm91dCBkYXRhIHNldHMgb2YgYSBnaXZlbiBwcm92aWRlciBhbmQgcHJvdmlkZXMgQVBJIGZvciBuYXRpb25hbCBvcGVuIGRhdGEgY2F0YWxvZy4iICJFeGlzdGluZyBTeXN0ZW0iCgogICAgICAgIGV1Q2F0YWxvZyA9IHNvZnR3YXJlU3lzdGVtICJFdXJvcGVhbiBPcGVuIERhdGEgQ2F0YWxvZyIgIlN0b3JlcyBhbmQgcHJlc2VudHMgbWV0YWRhdGEgcmVjb3JkcyBhYm91dCBkYXRhIHNldHMgZnJvbSBkaWZmZXJlbnQgRVUgY291bnRpcmVzIGFuZCBoYXJ2ZXN0cyBtZXRhIGRhdGEgZnJvbSBuYXRpb25hbCBvcGVuIGRhdGEgY2F0YWxvZ3MuIiAiRXhpc3RpbmcgU3lzdGVtIgoKICAgICAgICBsb2NhbENhdGFsb2dSZWdpc3RyeSA9IHNvZnR3YXJlU3lzdGVtICJSZWdpc3RyeSBvZiBsb2NhbCBvcGVuIGRhdGEgY2F0YWxvZ3MiICJTUEFSUUwgZW5kcG9pbnQgZm9yIHJlYWRpbmcgbG9jYXRpb25zIG9mIHJlZ2lzdGVyZWQgbG9jYWwgb3BlbiBkYXRhIGNhdGFsb2dzIHdoaWNoIG5lZWQgdG8gYmUgaGFydmVzdGVkLiIgIkV4aXN0aW5nIFN5c3RlbSIKICAgICAgICAKICAgICAgICBjb25zdW1lciA9IHBlcnNvbiAiQ29uc3VtZXIiICJBbiBhY3RvciB3aG8gc2VhcmNoZXMgZm9yIGRhdGEgc2V0cyBhbmQgYWNjZXNzZXMgdGhlbSBmb3IgdmFyaW91cyBwdXJwb3Nlcy4iICJDb25zdW1lciIKICAgICAgICAKCiAgICAgICAgIyByZWxhdGlvbnNoaXBzIHRvL2Zyb20gc29mdHdhcmUgc3lzdGVtcwogICAgICAgIGNvbnN1bWVyIC0+IG5hdGlvbmFsQ2F0YWxvZyAiU2VhcmNoZXJzIGZvciBtZXRhZGF0YSByZWNvcmRzIGluIgogICAgICAgIGNvbnN1bWVyIC0+IGV1Q2F0YWxvZyAiU2VhcmNoZXJzIGZvciBtZXRhZGF0YSByZWNvcmRzIGluIgoKICAgICAgICBuYXRpb25hbENhdGFsb2cgLT4gbG9jYWxDYXRhbG9nICJIYXJ2ZXN0cyBtZXRhZGEgcmVjb3JkcyBmcm9tIgogICAgICAgIGV1Q2F0YWxvZyAtPiBuYXRpb25hbENhdGFsb2cgIkhhcnZlc3RzIG1ldGFkYXRhIHJlY29yZHMgZnJvbSIKCiAgICAgICAgbmF0aW9uYWxDYXRhbG9nIC0+IGxvY2FsQ2F0YWxvZ1JlZ2lzdHJ5ICJSZWFkcyByZWdpc3RlcmVkIGxvY2FsIG9wZW4gZGF0YSBjYXRhbG9ncyBmcm9tIgoKICAgICAgICBsb2NhbENhdGFsb2cgLT4gbG9jYWxDYXRhbG9nUmVnaXN0cnkgIklzIHJlZ2lzdGVyZWQgaW4iCgogICAgICAgICMgcmVsYXRpb25zaGlwcyB0by9mcm9tIGNvbnRhaW5lcnMKICAgICAgICBjb25zdW1lciAtPiB3ZWJGcm9udGVuZCAiU2VhcmNoZXMgZm9yIG1ldGFkYXRhIHJlY29yZHMgYW5kIHZpZXdzIHRoZWlyIGRldGFpbHMgd2l0aCIKICAgICAgICB3ZWJGcm9udGVuZCAtPiBzZXJ2ZXIgIlVzZXMgdG8gZGVsaXZlciBmdW5jdGlvbmFsaXR5IgogICAgICAgIHNlcnZlciAtPiByZWNvcmRJbmRleCAiVXNlcyBmb3IgZmFzdCByZXRyaWV2YWwgb2YgbWV0YWRhdGEgcmVjb3JkcyBsaXN0cyIKICAgICAgICBzZXJ2ZXIgLT4gcmVjb3JkU3RvcmFnZSAiVXNlcyBmb3IgZmFzdCByZXRyaWV2YWwgb2YgbWV0YWRhdGEgcmVjb3JkcyBkZXRhaWxzIgogICAgICAgIGhhcnZlc3RvciAtPiBsb2NhbENhdGFsb2cgIkhhcnZlc3RzIG1ldGFkYXRhIHJlY29yZHMgZnJvbSIKICAgICAgICBoYXJ2ZXN0b3IgLT4gcmVjb3JkSW5kZXggIlVzZXMgdG8gcmVzZXQgbWV0YWRhdGEgcmVjb3JkcyBpbmRleC4gVGhlIHdob2xlIGluZGV4IGlzIGFsd2F5cyByZXBsYWNlZCIKICAgICAgICBoYXJ2ZXN0b3IgLT4gcmVjb3JkU3RvcmFnZSAiVXNlcyB0byBwZXJzaXN0cyBoYXJ2ZXN0ZWQgbWV0YWRhdGEgcmVjb3Jkcy4gQWxsIHJlY29yZHMgYXJlIGFsd2F5cyByZXBsYWNlZCIKICAgICAgICBoYXJ2ZXN0b3IgLT4gbG9jYWxDYXRhbG9nUmVnaXN0cnkgIlVzZXMgdG8gcmVhZCBsb2NhdGlvbnMgb2YgcmVnaXN0ZXJlZCBsb2NhbCBvcGVuIGRhdGEgY2F0YWxvZ3MiCgogICAgICAgICMgcmVsYXRpb25zaGlwcyB0by9mcm9tIGNvbXBvbmVudHMKICAgICAgICB3ZWJGcm9udGVuZCAtPiBsaXN0QVBJICJNYWtlcyBBUEkgY2FsbHMgdG8iICJKU09OL0hUVFBTIgogICAgICAgIHdlYkZyb250ZW5kIC0+IGRldGFpbEFQSSAiTWFrZXMgQVBJIGNhbGxzIHRvIiAiSlNPTi9IVFRQUyIKCiAgICAgICAgbGlzdEFQSSAtPiBzZWFyY2hDb250cm9sbGVyICJVc2VzIHRvIGFjY2VzcyBzZWFyY2ggYnVzaW5lc3MgZnVuY3Rpb25hbGl0eSIKICAgICAgICBkZXRhaWxBUEkgLT4gZGV0YWlsQ29udHJvbGxlciAiVXNlcyB0byBhY2Nlc3MgZGV0YWlsIGJ1c2luZXNzIGZ1bmN0aW9uYWxpdHkiCgogICAgICAgIHNlYXJjaENvbnRyb2xsZXIgLT4gZGF0YXNldE1vZGVsICJVc2VzIHRvIGFjY2VzcyBtZXRhZGF0YSBhYm91dCBkYXRhc2V0cyIKICAgICAgICBkZXRhaWxDb250cm9sbGVyIC0+IGRhdGFzZXRNb2RlbCAiVXNlcyB0byBhY2Nlc3MgbWV0YWRhdGEgYWJvdXQgZGF0YXNldHMiCiAgICAgICAgZGV0YWlsQ29udHJvbGxlciAtPiBkaXN0cmlidXRpb25Nb2RlbCAiVXNlcyB0byBhY2Nlc3MgbWV0YWRhdGEgYWJvdXQgZGlzdHJpYnV0aW9ucyIKCiAgICAgICAgZGF0YXNldE1vZGVsIC0+IHJlY29yZEluZGV4R2F0ZXdheSAiVXNlcyB0byByZXRyaWV2ZSBsaXN0IG9mIG1ldGFkYXRhIHJlY29yZHMgd2l0aCBnaXZlbiB2YWx1ZXMgb2Ygc2VsZWN0ZWQgcHJvcGVydGllcyIKICAgICAgICBkYXRhc2V0TW9kZWwgLT4gcmVjb3JkRGV0YWlsR2F0ZXdheSAiVXNlcyB0byByZXRyaWV2ZSBkZXRhaWxlZCBtZXRhZGF0YSIKICAgICAgICBkaXN0cmlidXRpb25Nb2RlbCAtPiByZWNvcmREZXRhaWxHYXRld2F5ICJVc2VzIHRvIHJldHJpZXZlIGRldGFpbGVkIG1ldGFkYXRhIgogICAgICAgIGRhdGFzZXRNb2RlbCAtPiBjb2RlTGlzdEFjY2VzcyAiVXNlcyB0byByZXRyaWV2ZSBjb2RlIGxpc3QgaXRlbXMgbGFiZWxzIGFuZCBkZXNjcmlwdGlvbnMiCiAgICAgICAgZGlzdHJpYnV0aW9uTW9kZWwgLT4gY29kZUxpc3RBY2Nlc3MgIlVzZXMgdG8gcmV0cmlldmUgY29kZSBsaXN0IGl0ZW1zIGxhYmVscyBhbmQgZGVzY3JpcHRpb25zIgoKICAgICAgICByZWNvcmRJbmRleEdhdGV3YXkgLT4gcmVjb3JkSW5kZXggIlByb3ZpZGVzIGFjY2VzcyB0byIKICAgICAgICByZWNvcmREZXRhaWxHYXRld2F5IC0+IHJlY29yZFN0b3JhZ2UgIlByb3ZpZGVzIGFjY2VzcyB0byIKICAgIH0KICAgIAogICAgdmlld3MgewogICAgICAgIAogICAgICAgIHN5c3RlbUNvbnRleHQgbmF0aW9uYWxDYXRhbG9nICJuYXRpb25hbENhdGFsb2dTeXN0ZW1Db250ZXh0RGlhZ3JhbSIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICB9CgogICAgICAgIGNvbnRhaW5lciBuYXRpb25hbENhdGFsb2cgIm5hdGlvbmFsQ2F0YWxvZ0NvbnRhaW5lckRpYWdyYW0iIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgfQoKICAgICAgICBjb21wb25lbnQgc2VydmVyICJzZXJ2ZXJDb21wb25lbnREaWFncmFtIiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgIH0KCiAgICAgICAgdGhlbWUgZGVmYXVsdAoKICAgICAgICBzdHlsZXMgewogICAgICAgICAgICBlbGVtZW50ICJFeGlzdGluZyBTeXN0ZW0iIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzk5OTk5OQogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICB9CgogICAgICAgICAgICBlbGVtZW50ICJDb25zdW1lciIgewogICAgICAgICAgICAgICAgYmFja2dyb3VuZCAjOTk5OTk5CiAgICAgICAgICAgICAgICBjb2xvciAjZmZmZmZmCiAgICAgICAgICAgIH0KICAgICAgICB9Cgp9Cg=="
},
"configuration" : { },
"model" : {
"people" : [ {
"id" : "19",
"tags" : "Element,Person,Consumer",
"name" : "Consumer",
"description" : "An actor who searches for data sets and accesses them for various purposes.",
"relationships" : [ {
"id" : "20",
"tags" : "Relationship",
"sourceId" : "19",
"destinationId" : "1",
"description" : "Searchers for metadata records in"
}, {
"id" : "21",
"tags" : "Relationship",
"sourceId" : "19",
"destinationId" : "17",
"description" : "Searchers for metadata records in"
}, {
"id" : "26",
"tags" : "Relationship",
"sourceId" : "19",
"destinationId" : "2",
"description" : "Searches for metadata records and views their details with"
} ],
"location" : "Unspecified"
} ],
"softwareSystems" : [ {
"id" : "1",
"tags" : "Element,Software System",
"name" : "Czech National Open Data Catalog (NODC)",
"description" : "Stores and presents metadata records about data sets and harvests meta data from local open data catalogs.",
"relationships" : [ {
"id" : "22",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "16",
"description" : "Harvests metada records from"
}, {
"id" : "24",
"tags" : "Relationship",
"sourceId" : "1",
"destinationId" : "18",
"description" : "Reads registered local open data catalogs from"
} ],
"location" : "Unspecified",
"containers" : [ {
"id" : "15",
"tags" : "Element,Container",
"name" : "Metadata Harvestor",
"description" : "Harvests metadata records from local open data catalogs",
"relationships" : [ {
"id" : "31",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "13",
"description" : "Uses to reset metadata records index. The whole index is always replaced"
}, {
"id" : "33",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "18",
"description" : "Uses to read locations of registered local open data catalogs"
}, {
"id" : "30",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "16",
"description" : "Harvests metadata records from"
}, {
"id" : "32",
"tags" : "Relationship",
"sourceId" : "15",
"destinationId" : "14",
"description" : "Uses to persists harvested metadata records. All records are always replaced"
} ],
"technology" : "LinkedPipes ETL"
}, {
"id" : "13",
"tags" : "Element,Container",
"name" : "Metadata Index",
"description" : "Index for fast searching in metadata records",
"technology" : "Apache SOLR via JSON/HTTPS"
}, {
"id" : "14",
"tags" : "Element,Container",
"name" : "Metadata Storage",
"description" : "Storage of metadata records",
"technology" : "CouchDB via JSON/HTTPS"
}, {
"id" : "3",
"tags" : "Element,Container",
"name" : "NODC Server",
"description" : "Implements all business functionality for browsing and viewing metadata records and provides it via a JSON/HTTPS API.",
"relationships" : [ {
"id" : "29",
"tags" : "Relationship",
"sourceId" : "3",
"destinationId" : "14",
"description" : "Uses for fast retrieval of metadata records details"
}, {
"id" : "28",
"tags" : "Relationship",
"sourceId" : "3",
"destinationId" : "13",
"description" : "Uses for fast retrieval of metadata records lists"
} ],
"components" : [ {
"id" : "12",
"tags" : "Element,Component",
"name" : "Code List Gateway",
"description" : "Provides access to code lists and their items via HTTPS dereferencing Web IRIs.",
"size" : 0
}, {
"id" : "5",
"tags" : "Element,Component",
"name" : "Record Detail API",
"description" : "Provides API for getting a detail of a given metadata record via a JSON/HTTPS API.",
"relationships" : [ {
"id" : "37",
"tags" : "Relationship",
"sourceId" : "5",
"destinationId" : "7",
"description" : "Uses to access detail business functionality"
} ],
"size" : 0
}, {
"id" : "4",
"tags" : "Element,Component",
"name" : "Record List API",
"description" : "Provides API for getting a list of metadata records according to specified search parameters via a JSON/HTTPS API.",
"relationships" : [ {
"id" : "36",
"tags" : "Relationship",
"sourceId" : "4",
"destinationId" : "6",
"description" : "Uses to access search business functionality"
} ],
"size" : 0
}, {
"id" : "10",
"tags" : "Element,Component",
"name" : "Metadata Index Gateway",
"description" : "Provides access to a metadata records index",
"relationships" : [ {
"id" : "46",
"tags" : "Relationship",
"sourceId" : "10",
"destinationId" : "13",
"description" : "Provides access to"
} ],
"size" : 0
}, {
"id" : "7",
"tags" : "Element,Component",
"name" : "Record Detail Controller",
"description" : "Implements and provides business functionality related to viewing details of metadata records",
"relationships" : [ {
"id" : "40",
"tags" : "Relationship",
"sourceId" : "7",
"destinationId" : "8",
"description" : "Uses to access metadata about distributions"
}, {
"id" : "39",
"tags" : "Relationship",
"sourceId" : "7",
"destinationId" : "9",
"description" : "Uses to access metadata about datasets"
} ],
"size" : 0
}, {
"id" : "8",
"tags" : "Element,Component",
"name" : "Distribution Model",
"description" : "Internal model of distribution metadata",
"relationships" : [ {
"id" : "43",
"tags" : "Relationship",
"sourceId" : "8",
"destinationId" : "11",
"description" : "Uses to retrieve detailed metadata"
}, {
"id" : "45",
"tags" : "Relationship",
"sourceId" : "8",
"destinationId" : "12",
"description" : "Uses to retrieve code list items labels and descriptions"
} ],
"size" : 0
}, {
"id" : "6",
"tags" : "Element,Component",
"name" : "Records Search Controller",
"description" : "Implements and provides business functionality related to searching for metadata records",
"relationships" : [ {
"id" : "38",
"tags" : "Relationship",
"sourceId" : "6",
"destinationId" : "9",
"description" : "Uses to access metadata about datasets"
} ],
"size" : 0
}, {
"id" : "9",
"tags" : "Element,Component",
"name" : "Dataset Model",
"description" : "Internal model of dataset metadata",
"relationships" : [ {
"id" : "42",
"tags" : "Relationship",
"sourceId" : "9",
"destinationId" : "11",
"description" : "Uses to retrieve detailed metadata"
}, {
"id" : "44",
"tags" : "Relationship",
"sourceId" : "9",
"destinationId" : "12",
"description" : "Uses to retrieve code list items labels and descriptions"
}, {
"id" : "41",
"tags" : "Relationship",
"sourceId" : "9",
"destinationId" : "10",
"description" : "Uses to retrieve list of metadata records with given values of selected properties"
} ],
"size" : 0
}, {
"id" : "11",
"tags" : "Element,Component",
"name" : "Metadata Detail Gateway",
"description" : "Provides access to a metadata records store",
"relationships" : [ {
"id" : "47",
"tags" : "Relationship",
"sourceId" : "11",
"destinationId" : "14",
"description" : "Provides access to"
} ],
"size" : 0
} ]
}, {
"id" : "2",
"tags" : "Element,Container",
"name" : "NODC Web Front-end",
"description" : "Provides all functionality for browsing and viewing metadata records to open data consumers via their web browser",
"relationships" : [ {
"id" : "35",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "5",
"description" : "Makes API calls to",
"technology" : "JSON/HTTPS"
}, {
"id" : "34",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "4",
"description" : "Makes API calls to",
"technology" : "JSON/HTTPS"
}, {
"id" : "27",
"tags" : "Relationship",
"sourceId" : "2",
"destinationId" : "3",
"description" : "Uses to deliver functionality"
} ]
} ]
}, {
"id" : "17",
"tags" : "Element,Software System,Existing System",
"name" : "European Open Data Catalog",
"description" : "Stores and presents metadata records about data sets from different EU countires and harvests meta data from national open data catalogs.",
"relationships" : [ {
"id" : "23",
"tags" : "Relationship",
"sourceId" : "17",
"destinationId" : "1",
"description" : "Harvests metadata records from"
} ],
"location" : "Unspecified"
}, {
"id" : "16",
"tags" : "Element,Software System,Existing System",
"name" : "Local Open Data Catalog",
"description" : "Stores metadata records about data sets of a given provider and provides API for national open data catalog.",
"relationships" : [ {
"id" : "25",
"tags" : "Relationship",
"sourceId" : "16",
"destinationId" : "18",
"description" : "Is registered in"
} ],
"location" : "Unspecified"
}, {
"id" : "18",
"tags" : "Element,Software System,Existing System",
"name" : "Registry of local open data catalogs",
"description" : "SPARQL endpoint for reading locations of registered local open data catalogs which need to be harvested.",
"location" : "Unspecified"
} ]
},
"documentation" : {
"sections" : [ {
"elementId" : "1",
"title" : "Context",
"order" : 1,
"format" : "Markdown",
"content" : "## Context\r\n\r\nThis document describes the architecture of the National Open Data Catalog\r\n\r\n![](embed:storageSystemContextDiagram)"
} ]
},
"views" : {
"systemContextViews" : [ {
"softwareSystemId" : "1",
"key" : "nationalCatalogSystemContextDiagram",
"dimensions" : {
"width" : 2586,
"height" : 1399
},
"enterpriseBoundaryVisible" : true,
"elements" : [ {
"id" : "1",
"x" : 1070,
"y" : 900
}, {
"id" : "16",
"x" : 200,
"y" : 900
}, {
"id" : "17",
"x" : 1936,
"y" : 900
}, {
"id" : "18",
"x" : 200,
"y" : 240
}, {
"id" : "19",
"x" : 1555,
"y" : 250
} ],
"relationships" : [ {
"id" : "25"
}, {
"id" : "24"
}, {
"id" : "23"
}, {
"id" : "22"
}, {
"id" : "21"
}, {
"id" : "20"
} ]
} ],
"containerViews" : [ {
"softwareSystemId" : "1",
"key" : "nationalCatalogContainerDiagram",
"dimensions" : {
"width" : 3994,
"height" : 1617
},
"externalSoftwareSystemBoundariesVisible" : true,
"elements" : [ {
"id" : "2",
"x" : 1025,
"y" : 599
}, {
"id" : "13",