Rafael Nadal is through to the semi-finals of the Masters event in Cincinnati after a vintage match against his old rival Roger Federer.