Marshal uses harvesters to retrieve data from various sources. Several Harvesters are included in Marshal allowing you to collect data from more or less any database and/or web service. You can combine any of the harvesters in your model to intertwine information from multiple sources.
For each Query node,
, in the Marshal model there's a harvester implemeting the actually functionality needed to communicate with the data source and to extract the information needed. Marshal provides a set of built-in harvester for accessing database (see Odbc
), files and web content and concept (see Routers
) for using external harvesters.
In order for the harvester to know what to harvest it needs input. There are two sources of harvester input: the configuration of the harvester and the execution of the model. Each harvester provides its own set of configuration properties including information on how to connect to the data source and what type of object, or what table, to harvest. The run-time, or execution, input is passed from the parent node according to the Parent relation property. This property is available to all Query nodes, regardless of the chosen harvester. It's used to pass the parameters that are unique to each call to the harvester. Thus, identifying what instances of the configured object type to harvest or, in the case of a database, what rows to harvest.
In the below example, the top level query will harvest the Site objects. The model will then, for each site object, invoke the harvester connected to the Article node to harvest all articles related to the current site.
By default, the root node is assigned to use the ODBC harvester. Any subsequent query node will inherit the harvester of its parent node. To change the harvester of a node simply double-click on the harvester icon.