From 08dc298bd233d4c6b22b60a9a9ef753dbd9f22df Mon Sep 17 00:00:00 2001 From: Robert Isele Date: Fri, 20 Feb 2026 14:26:55 +0100 Subject: [PATCH 1/3] Expanded the workflow reconfiguration page into a general page for workflows. Also explain the new mechanism for clearing dataset. --- docs/build/index.md | 2 +- docs/build/workflow-reconfiguration/index.md | 60 --------- docs/build/workflows/index.md | 116 ++++++++++++++++++ docs/build/workflows/wf-clear-datasets.png | Bin 0 -> 21577 bytes .../wf-config-port.png | Bin docs/build/workflows/wf-workflow.png | Bin 0 -> 30766 bytes 6 files changed, 117 insertions(+), 61 deletions(-) delete mode 100644 docs/build/workflow-reconfiguration/index.md create mode 100644 docs/build/workflows/index.md create mode 100644 docs/build/workflows/wf-clear-datasets.png rename docs/build/{workflow-reconfiguration => workflows}/wf-config-port.png (100%) create mode 100644 docs/build/workflows/wf-workflow.png diff --git a/docs/build/index.md b/docs/build/index.md index 96ecb187e..c4985ac13 100644 --- a/docs/build/index.md +++ b/docs/build/index.md @@ -31,7 +31,7 @@ The Build stage is used to turn your legacy data points from existing datasets i - [Lift Data from Tabular Data](lift-data-from-tabular-data-such-as-csv-xslx-or-database-tables/index.md) --- Build a Knowledge Graph from from Tabular Data such as CSV, XSLX or Database Tables. - [Lift data from JSON and XML sources](lift-data-from-json-and-xml-sources/index.md) --- Build a Knowledge Graph based on input data from hierarchical sources such as JSON and XML files. - [Extracting data from a Web API](extracting-data-from-a-web-api/index.md) --- Build a Knowledge Graph based on input data from a Web API. - - [Reconfigure Workflow Tasks](workflow-reconfiguration/index.md) --- During its execution, new parameters can be loaded from any source, which overwrites originally set parameters. + - [Reconfigure Workflow Tasks](workflows/index.md) --- During its execution, new parameters can be loaded from any source, which overwrites originally set parameters. - [Incremental Database Loading](loading-jdbc-datasets-incrementally/index.md) --- Load data incrementally from a JDBC Dataset (relational database Table) into a Knowledge Graph. diff --git a/docs/build/workflow-reconfiguration/index.md b/docs/build/workflow-reconfiguration/index.md deleted file mode 100644 index 80e300ae7..000000000 --- a/docs/build/workflow-reconfiguration/index.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -icon: eccenca/artefact-workflow -tags: - - Workflow ---- -# Workflow Reconfiguration - -## Introduction - -The operators of a workflow can be reconfigured completely in the context of a workflow. -During its execution, new parameters are loaded from any possible source and translated by a transformation task to allow an injection into the dataset configuration that overwrites originally set parameters. -To reconfigure a workflow operator, the transformation task has to be connected to the red dot at the top of this operator as shown in the following image: - -![Workflow config port](wf-config-port.png) - -Although this feature has been developed to support the ingestion of database deltas, the possible applications are various since any parameter can be overwritten to make workflow operators even more dynamic and reusable in various contexts. -The incremental ingestion of database content that was implemented as a first use-case can be found the application section of this page. -However, we intend to add other use-cases that have been implemented. -The following parameters seem to be good starting points for possible applications: - -- Transformation Task: - - Source Type - - Source Restriction -- JDBC endpoint (remote) - - Source Query - - Write Strategy - - Restriction -- Knowledge Graph (embedded) - - Clear Graph before workflow execution -- Scheduler - - Interval - - Enabled -- … - -## Implementation - -To reconfigure a workflow operator, you need to create a transformation task, the data source of which is the intended source of the dynamic parameters of the workflow operator. -Once you have created this task, you need to create a data value mapping for each parameter you want to overwrite. - -!!! info - - Only one transformation task can be used to reconfigure the workflow operator and one source can be used for a transformation task's source. - Thus, it is necessary to pre-process all parameters that need to be rewritten into one single dataset, e.g. a CSV file or a in-memory dataset. - Then, you can use this dataset to inject all parameters with one transformation task. - -Once you are sure, that your mapping rule entails the correct value, you can set the workflow operator parameter as the target property of the mapping rule. -After this is done, you can reconfigure any workflow operator that uses this parameter as part of its configuration. - -!!! info - - The transformation task needs a suffix of the workflow parameter's URI in the workflow operator's serialization as its target property. - This differs from the documentation that just refers to the parameter's `_name_`. - If you want to overwrite the source query of a JDBC endpoint, you need to define `sourceQuery` as the target property, which is the suffix of ``. - -## Applications - -Tutorials that showcase this function in an application context: - -- [Loading JDBC datasets incrementally](../loading-jdbc-datasets-incrementally/index.md) - diff --git a/docs/build/workflows/index.md b/docs/build/workflows/index.md new file mode 100644 index 000000000..db79e37c6 --- /dev/null +++ b/docs/build/workflows/index.md @@ -0,0 +1,116 @@ +--- +icon: eccenca/artefact-workflow +tags: + - Workflow +--- +# Workflows + +Workflows are the central building block to orchestrate complex data processing tasks. + +A **workflow** is a directed acyclic graph (DAG) that orchestrates data processing. Each workflow connects **datasets** with **operators** (transforms, linking tasks, and other processing steps) to define a complete data pipeline. + +![Typical workflow](wf-workflow.png) + +Workflows are the primary mechanism for: + +- Reading data from one or more sources, transforming it, and writing results to target datasets (for instance the Knowledge Graph). +- Connecting records across datasets using linking rules. +- Chaining multiple processing steps into a single, repeatable pipeline. +- Orchestrating other workflows as sub-tasks. + +This page describes common workflow operations and how to configure them. + +## Core Concepts + +### Node Types + +Every node in a workflow graph is one of: + +- **Dataset** - A data source and/or sink (CSV file, database table, Knowledge Graph, etc.). Typical sources are files or databases, while sinks are typically Knowledge Graphs. +- **Operator** - A processing step such as a Transform, Linking task, or custom operator. Operators read entities from their inputs, process them, and pass results to their outputs. + +A single project task (e.g., a Transform named "Clean addresses") can appear in the same workflow more than once; each occurrence is a distinct **workflow node**. + +In addition, it's possible to add notes, which don't affect the workflow execution. + +### Connection Types + +Nodes are linked by different types of connections: + +- **Data** - The default connection. Carries entity data from one node's output port to another node's input port. +- **Dependency** - Enforces execution order without transferring data. Use this when one node must finish before another starts, but the second node does not consume the first node's output. +- **Config** - Feeds configuration parameters into a downstream node at runtime, allowing dynamic reconfiguration of task settings. + +### Execution Order + +The workflow executor builds a dependency graph from all connections and performs a **topological sort** to determine execution order. Nodes with no unsatisfied dependencies execute first; downstream nodes execute once all of their inputs are available. + +### Replaceable Datasets + +Datasets can be marked as **replaceable inputs** or **replaceable outputs** on the workflow. When a workflow is executed programmatically (e.g., via the REST API or as a nested workflow), callers can substitute these datasets with alternative sources or sinks without modifying the workflow definition. This enables workflow reuse across different environments or data sets. + +## Clearing datasets + +The **Clear Dataset** operator empties the dataset connected to its output before new data is written. This is the recommended way to ensure a target dataset starts clean on every workflow run. + +Place the Clear Dataset operator in the workflow and connect its output to the dataset that should be cleared. The operator takes no data inputs; connect it using a **dependency connection** from the upstream node that must complete first, or leave it unconnected if clearing should happen at the start of execution of the subsequent nodes. + +![Clear Datasets](wf-clear-datasets.png) + +Some datasets historically provided their own clear attributes (e.g., `Clear graph before workflow execution` on the Knowledge Graph dataset). These per-dataset attributes are **deprecated** and should no longer be used. Use the Clear Dataset operator instead, which works uniformly across all dataset types. + +## Workflow Reconfiguration + +### Introduction + +The operators of a workflow can be reconfigured completely in the context of a workflow. +During its execution, new parameters are loaded from any possible source and translated by a transformation task to allow an injection into the dataset configuration that overwrites originally set parameters. +To reconfigure a workflow operator, the transformation task has to be connected to the red dot at the top of this operator as shown in the following image: + +![Workflow config port](wf-config-port.png) + +Although this feature has been developed to support the ingestion of database deltas, the possible applications are various since any parameter can be overwritten to make workflow operators even more dynamic and reusable in various contexts. +The incremental ingestion of database content that was implemented as a first use-case can be found the application section of this page. +However, we intend to add other use-cases that have been implemented. +The following parameters seem to be good starting points for possible applications: + +- Transformation Task: + - Source Type + - Source Restriction +- JDBC endpoint (remote) + - Source Query + - Write Strategy + - Restriction +- Knowledge Graph (embedded) + - Graph +- Scheduler + - Interval + - Enabled +- … + +### Implementation + +To reconfigure a workflow operator, you need to create a transformation task, the data source of which is the intended source of the dynamic parameters of the workflow operator. +Once you have created this task, you need to create a data value mapping for each parameter you want to overwrite. + +!!! info + + Only one transformation task can be used to reconfigure the workflow operator and one source can be used for a transformation task's source. + Thus, it is necessary to pre-process all parameters that need to be rewritten into one single dataset, e.g. a CSV file or a in-memory dataset. + Then, you can use this dataset to inject all parameters with one transformation task. + +Once you are sure, that your mapping rule entails the correct value, you can set the workflow operator parameter as the target property of the mapping rule. +After this is done, you can reconfigure any workflow operator that uses this parameter as part of its configuration. + +!!! info + + The transformation task needs a suffix of the workflow parameter's URI in the workflow operator's serialization as its target property. + This differs from the documentation that just refers to the parameter's `_name_`. + If you want to overwrite the source query of a JDBC endpoint, you need to define `sourceQuery` as the target property, which is the suffix of ``. + +### Applications + +Tutorials that showcase this function in an application context: + +- [Loading JDBC datasets incrementally](../loading-jdbc-datasets-incrementally/index.md) + diff --git a/docs/build/workflows/wf-clear-datasets.png b/docs/build/workflows/wf-clear-datasets.png new file mode 100644 index 0000000000000000000000000000000000000000..78534556ea0e492947b126860620b763793604ef GIT binary patch literal 21577 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�`L%Q`DE}40;k+A#gMYhm)O}rO`Iyb4-ec|vI-k~#t(@rS0f<`B@kGQXt{_yh}t6vh^`n zqo7k``uIlN*m&(}K#Om9i5SD_D@iE)atp`p`^iX!PBDSXWyu-2s>Rzs6$HQBacH>M zw)Bwr%F)HACIz=&N-JH!GWyBK@9uDz&I%ospN8X;j(AP9<3ws188lt@^@a^Hz;ZEx@Cr+ZGm%!iyg@0od@nR))t@8=tui6Hd3 zHkED4dn))MWr^hBP2@^Ca z>B-5@+XH5z4k2-p!6@OKFPU~-14t(`te_^EO{<*5;ZCg`n+j@WAAPvouV~$3gbPmM;2;PlcCk&+90j)$I{F&r$1Kzm2Z5e~blvjhD5RUm=e_iyxYdcieu*!bj_w6(%xa5L5WmPw0xZS?N;59&>~Iz{ ztQ+A6GO)tDco507RtMl{bp>5Lq|89u)fe2G7XNGx>9+q4xSbWc(_3fwx{qcp!3 ziXlf>BHfyXFyq7a2G+X-tIZ6NqH|wX^6r^>w1BahJvZv`0)lUORhMjU=Lk+NS=Jmg zTo5^Sx>B9uT|c#I`R35Z7$6-W%lR~u=2=G|n~_{e2q$%6a{6n%d-Gq?SbS3;EdJ>Th$PWhX5nhq!W+< zp6@sF9P4+0Wsz6V4RC!(d8rWe2=!#NovfhS(6pURx||vp|1gFd2fYjkdabXyX&JJB zrDnV_iG193uV*qZhq@N9yOU3Wmdxz6g_!?#yxEbwG0Zb_0R8eclTmxbqJra^3-xM( zxZ)HyeIv4n@e09l-yU(PLVb1X_KzRT+E7KWt1fOVz&H_MVIV~FXF;7++2!2W zxbWGJ&Bg2c+BcSNarTz?F?fTiwpxfF}MdlB9!wrJ$w#z7^ zI=Zyyj=Vi|)b`|!q>1mps5>FmvMNp`hA7SjK|xe>TXP6T<*xDQ)$J&|3F4IzY={DD zt_&OI-tc4t-1BJD6w5bv)(*omG)%Q8@*he_!30WxRz6IQ`xM!T(bJ~-D3^DN+Vhs} zwgp8wJ_Cg|j^tJOA7AQBvg@VaZG%}v%FqEE{m~G|bE4!ri+Iq!w_h`xTOqZo)@{93 zV)505)0MNn_*k8xg11iC?*3fHa_)d=Tzdu)nTp=k)yIEEn$LI^Zr)RtgfqDc#ocuF z(_bf>E?mx{oRLn&W|eU^zrZ6h_U|?gK4zy{Y`j=1wRbY( zEN}ll^(VCA4mT8)xwGxc9GMLSdJ+&=R2YAwI`og!YS&-52aHz`Qt&l1gASdH4_{B` zp6?WRSasa1K-QY-jeh>fOGHOJL7fmuTOQi=zY(W$P#(-v!SoG$;%;@$IjjuthC6gC zyr}R~_HpV&c7+~We0Ar4j~?a-df@Z}(Yja6pL+iXcU^zfQ9m}NA2!K6zU!W!e>fP+ zAZsp+nM+l{x6O+t5H=K%8?C=8ww+&Zn{4M6~Odd)k3&K=MqE9jYAwJzl^fgNCLbsDdDWU-wr=K@Q>cqA_A|KZDWa zCAG_f5UKGyVHE4nIfBv_lGi9YCpi;AQ0W(j?g5rZwsA?SXE3llqMGlgwMaliH_iCp zH4v4W^U7pF@@V)`xH5h@WcGo6)Z!!a3@`W)U5Y0EtwYxA`h?H4^_M+321!GgIoLTJ JWF7E|`wvq8DN6tV literal 0 HcmV?d00001 diff --git a/docs/build/workflow-reconfiguration/wf-config-port.png b/docs/build/workflows/wf-config-port.png similarity index 100% rename from docs/build/workflow-reconfiguration/wf-config-port.png rename to docs/build/workflows/wf-config-port.png diff --git a/docs/build/workflows/wf-workflow.png b/docs/build/workflows/wf-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..aec262394858f7c151659a5fc3df4da82323eddc GIT binary patch literal 30766 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%0Dv>6}Hvi7<4C=tE;PL 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 DBF(>7 literal 0 HcmV?d00001 From 778a260340ea9df65b7736b7a6fbf77a96f908db Mon Sep 17 00:00:00 2001 From: Robert Isele Date: Fri, 20 Feb 2026 14:32:49 +0100 Subject: [PATCH 2/3] Proofreading --- docs/build/workflows/index.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/build/workflows/index.md b/docs/build/workflows/index.md index db79e37c6..29aa5f957 100644 --- a/docs/build/workflows/index.md +++ b/docs/build/workflows/index.md @@ -5,7 +5,7 @@ tags: --- # Workflows -Workflows are the central building block to orchestrate complex data processing tasks. +Workflows are the central building blocks for orchestrating complex data processing tasks. A **workflow** is a directed acyclic graph (DAG) that orchestrates data processing. Each workflow connects **datasets** with **operators** (transforms, linking tasks, and other processing steps) to define a complete data pipeline. @@ -31,7 +31,7 @@ Every node in a workflow graph is one of: A single project task (e.g., a Transform named "Clean addresses") can appear in the same workflow more than once; each occurrence is a distinct **workflow node**. -In addition, it's possible to add notes, which don't affect the workflow execution. +In addition, notes can be added; they do not affect workflow execution. ### Connection Types @@ -53,7 +53,7 @@ Datasets can be marked as **replaceable inputs** or **replaceable outputs** on t The **Clear Dataset** operator empties the dataset connected to its output before new data is written. This is the recommended way to ensure a target dataset starts clean on every workflow run. -Place the Clear Dataset operator in the workflow and connect its output to the dataset that should be cleared. The operator takes no data inputs; connect it using a **dependency connection** from the upstream node that must complete first, or leave it unconnected if clearing should happen at the start of execution of the subsequent nodes. +Place the Clear Dataset operator in the workflow and connect its output to the dataset that should be cleared. The operator takes no data inputs; connect it using a **dependency connection** from the upstream node that must complete first, or leave it unconnected if the dataset should be cleared before any subsequent nodes execute. ![Clear Datasets](wf-clear-datasets.png) @@ -112,5 +112,4 @@ After this is done, you can reconfigure any workflow operator that uses this par Tutorials that showcase this function in an application context: -- [Loading JDBC datasets incrementally](../loading-jdbc-datasets-incrementally/index.md) - +- [Loading JDBC datasets incrementally](../loading-jdbc-datasets-incrementally/index.md) \ No newline at end of file From 2ba2a00eb3f8a2cf4b50e0c1d66c75f499e3eed9 Mon Sep 17 00:00:00 2001 From: Robert Isele Date: Fri, 20 Feb 2026 14:34:03 +0100 Subject: [PATCH 3/3] Added missing section. --- docs/build/workflows/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/workflows/index.md b/docs/build/workflows/index.md index 29aa5f957..c4c8ca338 100644 --- a/docs/build/workflows/index.md +++ b/docs/build/workflows/index.md @@ -5,6 +5,8 @@ tags: --- # Workflows +## Introduction + Workflows are the central building blocks for orchestrating complex data processing tasks. A **workflow** is a directed acyclic graph (DAG) that orchestrates data processing. Each workflow connects **datasets** with **operators** (transforms, linking tasks, and other processing steps) to define a complete data pipeline. @@ -18,8 +20,6 @@ Workflows are the primary mechanism for: - Chaining multiple processing steps into a single, repeatable pipeline. - Orchestrating other workflows as sub-tasks. -This page describes common workflow operations and how to configure them. - ## Core Concepts ### Node Types @@ -112,4 +112,4 @@ After this is done, you can reconfigure any workflow operator that uses this par Tutorials that showcase this function in an application context: -- [Loading JDBC datasets incrementally](../loading-jdbc-datasets-incrementally/index.md) \ No newline at end of file +- [Loading JDBC datasets incrementally](../loading-jdbc-datasets-incrementally/index.md)