One of the goals of mobile and ubiquitous computing is to enable ad-hoc interactions between different kinds of entities to help end-users perform different kinds of tasks. These entities, which include devices and services, may either be mobile or situated in the surrounding physical environment. However, these interactions require the use of rich semantic models describing the capabilities of the entities, the data exchanged between them and the desires of end-users. These semantic models enable the discovery of entities that satisfy certain constraints as well as the composition of different entities into applications for performing different kinds of tasks. In this paper, we describe two models that we have used in our systems for describing data and entities. The first model is based on OWL ontologies, where all data is described by a set of OWL facts, and component inputs and outputs are described using RDF graph patterns. The second model is based on folksonomies, where all data is described by a set of tags, and component inputs and outputs are also described using sets of tags. The two models have very different properties in terms of expressiveness and ease of use. We present our experiences in using these models for discovery of entities and for the automatic composition of complex flows in response to dynamic end-user goals. We also describe some of the future challenges that lay in the path of semantically-enabled ad-hoc interactions.