Querying a finite set of data sources. A method includes receiving a query from a user. The method further includes determining a set of two or more data sources from the finite set of data sources that together can be used to satisfy the query. The method further includes translating at least a portion of the query from the user to semantically appropriate queries for the two or more data sources. The method further includes receiving results from the two or more data sources to the semantically appropriate queries. The method further includes aggregating the results, and presenting the aggregation to the user.