I. Introduction
Applications increasingly rely on the Web, and in particular Service-Oriented Computing (SOC), for their functioning [1]–[5]. The foundation of SOC is the concept of Web services, which provide functionality that is accessible over the network in a modular way [6]. This encourages the reuse of existing functionality as opposed to costly re-implementation, and gives rise to the idea of Web service composition [7], whereby multiple Web services that perform simpler tasks are combined into a more complex application. In order to produce a functional composite application, the inputs required by all service operations employed must be fulfilled, either by the user or by the outputs produced by operations of preceding services in the workflow. Languages such as WS-BPEL [8] are used to describe the composition, and the services in it are offered by a service provider and formally described according to standards such as WSDL [9].