As part of the enum support proposal
(https://cwiki.apache.org/confluence/display/DAFFODIL/Proposal%3A+Feature+to+support+enumerations+and+typeValueCalc),
there is a need to lookup types by qname from within the runtime system.
For instance, suppose the schema defined the following simpleType:
<xs:simpleTypename="IntToString" dfdl:repType="tns:uint8">
<xs:restriction base="xs:string">
<xs:enumeration value="A" dfdl:repValues="0"
<xs:enumeration value="B" dfdl:repValueRangess="1 255"
</xs:restriction>
</xs:simpleType>
In addition to using the lookup table by creating an element with type
tns:IntToString, it is also possible to utilize it from a DFDL expression: {
dfdl:inputTypeCalcString('tns:IntToString', x) }
Normally, this expression would get compiled during compile time, which means
we can (in principle) just do the lookup then. However, it is also possible
that the debugger will be asked to evaluate this epression at runtime; at which
point I do not believe we currently preserve the information needed to lookup
tns:IntToString (in fact, even the function defined by tns:IntToString passed
to the runtime once per element that uses it, which is potentially 0 times).
As an added complication, because of the need to support compiling expressions
at runtime, there is not currently an easy way to pass in the schemaSet needed
to do the lookup to the compiler even at compile time (since the signature of
the compile function is defined in the runtime subsystem).
To resolve this, I am thinking that we pass a mapping of (QName ->
TypeValueCalculator) that contains all of the types which define such a
conversion into the runtime system. However, I am unsure of where we would pass
in such a global mapping, as it seems wasteful to pass in the same mapping for
every element (as it stands, the debugger gets its dpathCompileInfo from the
runtimeData of the currentElement, but duplicating all of the typeValueCalc
functions on every element seems excessively wasteful).
Brandon T. Sloane
Associate, Services
[email protected] | tresys.com