In the Service Oriented Architecture paradigm services are self-contained software units of functionality. Several services can be composed to assemble a composite service that provides an overall functionality. This process is called Service Composition. The automation of the service composition process aims at decreasing the human intervention during the service discovery, matching, ranking, filtering and reasoning about the resulting composition candidates. The paper presents an innovative approach to automatic service composition. The discovery and matchmaking is based on semantic annotations of service properties, e.g. their inputs, outputs and goals. The approach uses a graph-based search algorithm to determine all possible composition candidates and applies certain measures to rank them. Filtering and reasoning is accomplished by validating the composition candidates using goal-based expressions.