[ 
https://issues.apache.org/jira/browse/DAFFODIL-2437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17230820#comment-17230820
 ] 

Steve Lawrence commented on DAFFODIL-2437:
------------------------------------------

Is this a duplicate of DFDL-2429?

> dfdlx:direction property for defineVariable
> -------------------------------------------
>
>                 Key: DAFFODIL-2437
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2437
>             Project: Daffodil
>          Issue Type: New Feature
>          Components: Back End, Front End
>    Affects Versions: 3.0.0
>            Reporter: Mike Beckerle
>            Priority: Major
>             Fix For: 3.1.0
>
>
> DFDL is missing a property on dfdl:newVariableInstance and dfdl:setVariable 
> (or perhaps it should be on the dfdl:defineVariable) to indicate if they are 
> to be evaluated at parse, unparse, or both.
>  
> I have updated the PCAP schema on github to illustrate this issue.
>  
> This is a pull request (code review) of the changes 
> [https://github.com/DFDLSchemas/PCAP/pull/10]
>  
> In the PCAP schema the IPSrcGrp group ref appears immediately before the 
> IPSrc element. Similarly the IPDestGrp reference appears immediately before 
> the IPDest element.
>  
> These groups contain elements which are the individual binary bytes of the IP 
> Source and IP Dest addresses. They are 4 unsigned bytes.
> When parsing these are parsed and then their values concatenated as strings 
> into a string like "1.2.3.4".
>  
>  
> When unparsing, these groups use dfdl:outputValueCalc to take apart a string 
> like "1.2.3.4" (which appears in the infoset), back into its individual 
> digits 1, 2, 3, 4, and creates an unsignedByte value of each number.
>  
> The problem is, these groups are absolute nonsense if you view the 
> dfdl:newVariableInstance defaultValue expression as being evaluated at parse 
> time. The expression is for use *only* at unparse time and immediately does a 
> forward reference to the following IPSrc member containing the "1.2.3.4" type 
> string.
>  
> Without some sort of additional property on dfdl:newVariableInstance and 
> dfdl:setVariable (or dfdl:defineVariable) to indicate that this only should 
> be evaluated at unparse time, there is no way to suppress evaluation and 
> perform it only at unparse time.
>  
> I suggest we need an additional property on newVariableInstance and 
> setVariable (or on dfdl:defineVariable) which I suggest is called 
> 'direction', with values 'parse', 'unparse', 'both'. This property defaults 
> to 'both', but if set to 'unparse' only evaluates the expression (and 
> binds/sets variable) during that direction of processing. 
>  
> This property setting also loosens the DFDL spec restriction that setVariable 
> and newVariableInstance expressions only refer backward. That restriction 
> makes variables fairly useless when unparsing, as most usage of variables 
> from dfdl:outputValueCalc would be to capture common subexpressions that are 
> doing forward reference.
>  
> (Note: maybe the values of the property should be "input", "output" and 
> "both" to correspond to dfdl:inputValueCalc and dfdl:outputValueCalc property 
> names?)
>  
> Standard practice now is such new DFDL features must be created as 
> experimental features in an implementation and then proposed for inclusion in 
> the DFDL language.
>  
> An experimental feature writeup of this proposal is needed to describe the 
> implementation once we have experience with it. 
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to