We can see that the < flexcontainer> has [customAttribute] and < semanticDescriptor> properties in Table 9.6.35-1(TS-0001). The [customAttribute] property can hold values for < flexcontainer>.
< semanticDescriptor> holds some RDF which has relationships and values, but we can also store these values on [CustomAttribute] property right? So, why we need < semanticDescriptor> attribute in < flexcontainer> ?
You can define a new <flexContainer> specialisation that contains in addition to the actual functional data points an extra attribute where you can store an RDF or a reference to an RDF. But then you cannot utilise all the semantic support that the CSE provides.
The <semanticDescriptor> is not just an attribute but a child resource of most other resource types. It is used to store a semantic description (an RDF description) for the parent resource. But it could provide more information than just the RDF, for example an ontology reference, related semantics, or a status regarding the semantic validity of the description.
But more importantly, adding a <semanticDescriptor> to a resource enables the full range of semantic support of a CSE for that resource, ie. semantic filtering, discovery and querying, reasoning, data analytics, mash-up, semantic validation etc.
Please have a look at oneM2M's TS-0001, chapter 9.6.30 - "Resource Type semanticDescriptor" for a description of the resource type. The general specification of semantic support in oneM2M can be found in TS-0034 "Semantics Support".