Ontologies are formalism whose purpose is to support humans or machines to share some common knowledge in a structured way. They allow the concepts and terms relevant to a given domain to be identified and defined in an unambiguous way. As such, ontologies are seen as the key technology used to describe the semantics of information at various sites, overcoming the problem of implicit and hidden knowledge and thus enabling exchange of semantic contents. In this report we survey the work on ontologies that has been carried out in recent years. In particular, we first overview the languages that have been proposed for representing ontologies, and present the work on reasoning over ontologies. We then overview the work on ontologies from four different points of view: (i) We survey methodologies for designing and maintaining ontologies, presenting automated tools suitable for such tasks. (ii) We present languages and architectures for accessing, processing and in general making use of ontologies. (iii) We presents several approaches for integrating and merging ontologies by detecting correspondences among them. (iv) Finally, we present different approaches for making heterogeneous and autonomous ontologies interoperate, in the sense that the various ontologies are not modified as an effect of interoperating with the others.