Engineering Semantic Self-composition of Services Through Tuple-Based Coordination