Semantic Web services (SWS) have attracted increasing attention due to their potential to automate discovery and composition of current syntactic Web services. An issue that prevents a wider adoption of SWS relates to the manual nature of the semantic annotation task. Manual annotation is a difficult, error-prone, and time-consuming process and automating the process is highly desirable. Though some approaches have been proposed to semi-automate the annotation task, they are difficult to use and cannot perform accurate annotation for the following reasons: (1) They require building application ontologies to represent candidate services and (2) they cannot perform accurate name-based matching when labels of candidate service elements and ontological entities contain Compound Nouns (CN). To overcome these two deficiencies, this paper proposes a query-based approach that can facilitate semi-automatic annotation of Web services. The proposed approach is easy to use because it does not require building application ontologies to represent services. Candidate service elements that need to be annotated are extracted from a WSDL file and used to generate query instances by filling a Standard Query Template. The resulting query instances are executed against a repository of ontologies using a novel query execution engine to find appropriate correspondences for candidate service elements. This query execution engine employs name-based and structural matching mechanisms that can perform effective and accurate similarity measurements between labels containing CNs. The proposed semi-automatic annotation approach is evaluated by employing it to annotate existing Web services using published domain ontologies. Precision and recall are used as evaluation metrics. The resulting precision and recall values demonstrate the effectiveness and applicability of the proposed approach.