## 1 Introduction  
### Background  
Nowadays, we are surrounded by smart things, interacting with them in our daily activities. In this ubiquitous environment, a variety of things communicate with each other and adapt their behavior in order to provide suitable services and reach common goals [1]. _Ubiquitous computing_ involves the employment of usually low-cost devices that add intelligence to an environment and offer personalized services to the users [2]. The emergence of the _Internet of Things_ (IoT) paradigm expands the ubiquitous characteristics to a wider area, exploiting the existing internet backbone to provide seamless connectivity anywhere and by anything, transcending a single environment to cover all ecosystems and applications [3]. _Context_ is defined as \"any information that can be used to characterise the situation of an entity. An entity is a person, place, or object that is considered relevant to the interaction between a user and an application, including the user and applications themselves\" [4]. _Context-awareness_ (CA) refers to the ability of the system to be continually aware of its situation in the physical, virtual and user environment, and has been established as a major tool of ubiquitous computing [5]. Reviewing the field, [PERSON] et al. [6] propose the following _context life cycle_, which has since then been widely adopted: context (a) acquisition, (b) modeling, (c) reasoning and (d) dissemination. A CA application may enhance the interaction between humans and machines by adding perception of the environment, which eventually leads to intelligence. Machine-to-machine interaction can also be improved upon fusion, analysis and reasoning on the context. Indeed, many ubiquitous applications incorporate CA computing procedures [6; 7]. _Context modeling_ has always been at the center of CA computing. Early approaches included key-value and markup schemes (e.g., XML), which are computationally efficient and easy to manage but support limited reasoning and fail to represent more complex relations among contextual entities. In order to achieve efficient representation of relations, graphical models were introduced, such as the context modeling language (CML) [8]. Object-based models are also exploited to integrate inheritance and encapsulation, influenced by the success of object-based programming. In past years, logic formalism, in the form of formal ontologies, was used as the preferred method for developing context models [9]. The emerging concept of the semantic web of things [10] combines human, machine, physical and abstract things and environments toward a convergence of IoT with the semantic web. Hybrid approaches were introduced as early as 2004, when [11] combined formal ontologies with CML. Reviewing the field, [PERSON] et al. [6] claim that incorporating multiple modeling techniques is the best way to mitigate each other's weaknesses. Many _reasoning_ techniques for making inferences about context are proposed in the literature [12], including probabilistic logic, rule-based, fuzzy logic, supervised and unsupervised learning and ontology-based semantic reasoning. The selection of the appropriate reasoning technique is heavily influenced by the adopted modeling method. Since formal ontologies have taken the world by the storm, it would be expected that ontology-based reasoning also follows the same popularity. Additionally, rule-based reasoning is easy to implement and has a broad applicability to all domains, making it the most commonly used technique [6]. The various reasoning techniques commonly suffer from certain drawbacks, mainly that each one is not versatile enough to individually address all the requirements of an IoT ecosystem [13]. Rules are error-prone due to manual labor and have complex maintenance. Supervised learning needs trained data, while unsupervised learning is not easily validated. Ontologies fail at uncertain values and require computational power.