1. A method for a computer having at least one processor for automated composition of a software application, comprising: receiving a customizable template for application composition and a composition goal, wherein the goal comprises a plurality of tags and the goal is incomplete such that more than one possible composition matches the goal, wherein the goal is input to the computer by a user; refining the goal by having the computer processor automatically add refinement tags to the goal, the refinement tags being added to the goal in response to semantics-based decisions; and generating an application flow that matches the customizable template and the refined goal, wherein the application flow comprises data sources, data processing operators, and outputs of the application flow, wherein additional semantics-based decisions take place before the application flow is generated and tag semantics are leveraged and cross-correlated with other available information during refinement of the goal.