The assumption of many existing oneM2M applications is that they interact with other oneM2M applications through known resource structures. They either create the resources themselves or are configured to use specific resources. Information is typically stored in containers, often as base64-encoded content instances, with the implicit assumption that applications have a-priori agreed on the syntax and semantics of this information.
Such an approach works well for small-scale and relatively static settings. When changes happen, the configuration will be updated manually. However, in more dynamic settings where the relevant resources frequently change, this becomes impractical. To satisfy those settings, relevant resources need to be discovered. Since Release 1, discovery of resources based on specific attributes and the use of labels has been made possible. The agreement of a fixed set of labels - which can only be combined using a logical OR operation in a discovery request - could be a viable solution.
For more heterogeneous, dynamic and larger scale scenarios, a more expressive approach for describing and discovering resources is needed. There are heterogeneous underlying technologies that can provide their information according to a different syntax, according to different units, e.g. Celsius, Fahrenheit and Kelvin. Those technologies may measure different aspects, e.g. indoor temperature, outdoor temperature, fridge temperature, etc., and the quality of the measurement may differ.
Another motivation of semantic annotations is to support the re-use of the same information by multiple applications. For example, in a smart city, applications may need to dynamically discover relevant resources according to multiple criteria at the same time - as sketched in the previous paragraph.
With semantic annotations, all the different aspects of IoT data can be described using RDF, which is a standardized semantic format. The vocabulary used for this description can be defined according to an ontology. With semantic discovery, applications can describe precisely what information they need or can deal with. This is powered by specifying a semantic filter using the SPARQL query language. The SPARQL filter is matched against the respective semantic annotation of each resource within the discovery scope, and the resource is included in the result of the discovery request only if the filter fits.