If I understand correctly, you want to put object specific information (world location, object type) in <semantics> and behavior information (proximity, precision, dynamic/not dynamic) in the target?
Perhaps
<semantics> is overly broad. I am trying to localize named locations so they can be effectively reused between behaviors of the same request. I do believe that reuse benefits from separation from the behavior information. I don't don't believe BML processors need to know object type information, and in my examples I intentionally referred to other actors (e.g. "bob") as objects. Other aspects of the SAIBA pipeline, like the FML processor may need object type info (e.g., is a communicative intent about another person). It is important that a BML processor understand some concepts of space and spatial relations. Conversely, the upstream behavior planner should not need to understand as much about spatial relations, but may still need to share some set of object references external of any particular behavior request.
I'm not extremely enthusiastic about the semantic block. Maybe it is because it feels like you're stuffing world-object knowledge into BML now. I find the world position example not very convincing, do you have any other extensions of target in mind? I would prefer a design in which a realizer and planner share a world that they can query for object information based on object id, rather than directly providing object information in the BML itself. The latter might cause quite a bit of extra verbosity over different BML blocks too (you'd need to redefine bob in each new BML block that requires him). This is definitely an issue that requires a broader SAIBA discussion though.
I agree that much information must come from an shared ontology and knowledge base. Nonetheless, such a query process requires another protocol if we are aiming for a truly modular SAIBA pipeline of replacable parts. No doubt, we will need to address that at some point, but not before we finalize BML 1.0. This proposed modification just attempts to address a thin slice of that functionality, with an emphasis on spatial relationships, so we can make useful applications.
Even so, I expect we will often need to refer to unnamed locations, where a string identifier is not enough:
<!-- To the left of Bob (example walk target)-->
<semantics>
<object id="bob" />
<location id="there">
<frame ref="bob" />
<vector>1 0 0</vector>
</location>
</semantics>I've also thought about defining locations in space for gestures relative to the characters own body or body parts:
<!-- Gesture space reference locations (e.g., for comparison gestures) -->
<semantics>
<location id="left">
<frame ref="self:chest" />
<vector>0.2 -0.1 0.5</vector>
</location>
<location id="right">
<frame ref="self:chest" />
<vector>-0.2 -0.1 0.5</vector>
</location>
</semantics>This generalizes a concept we see in the
<gesture> behavior in a way that allows it to be used by other behaviors. For instance, it allows gazing at the space, even if empty, as a gestural reference. However, it is also more precise than may be necessary, and looses the relaxed definitions in the current
<gesture>.