You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@daffodil.apache.org by "Steve Lawrence (Jira)" <ji...@apache.org> on 2023/04/19 18:13:00 UTC

[jira] [Commented] (DAFFODIL-1217) Alignment test not appropriately issuing warning for optional occurrence.

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

Steve Lawrence commented on DAFFODIL-1217:
------------------------------------------

The requirement mentioned in the code states:

> To avoid ambiguity when parsing, optional elements and variable-occurrence arrays
> where the minimum number of occurrences is zero cannot have alignment properties
> different from the items that follow them. It is a schema definition error otherwise.

The check takes place in the [checkForAlignmentAmbiguity|https://github.com/apache/daffodil/blob/main/daffodil-core/src/main/scala/org/apache/daffodil/core/dsom/ElementBase.scala#L1337-L1353] function.

I see two reasons why this test might be failing. 

1. In the mentioned function, we only perform the check on an element if "isOptional" is true. In this test, the element is an array with minOccurs="0", which is not considered optional. To fix this, we can probably just change the check to look for "minOccurs == 0" instead of "isOptional".
2. In the mentioned function, we look at "laterSiblings" and see if any have a different alignment than the current element. However, "laterSiblings" only looks at lexical siblings. It does not look at elements that could logically appear after this one. In this test, that is what happens--the min zero occurrence array is the last child of a complex type, and the element with a different alignment is the first sibling of its parent. So laterSiblings is empty and the check passes.

I'm not sure how easy it is to fix item 2. In fact, I wonder if we even should? Maybe it is correct to only inspect lexical siblings for this check? Keep in mind, this check isn't even a requirement in the current specification since actual formats like MIL-STD-2045 require optional elements to be followed by elements with different alignment.

> Alignment test not appropriately issuing warning for optional occurrence.
> -------------------------------------------------------------------------
>
>                 Key: DAFFODIL-1217
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-1217
>             Project: Daffodil
>          Issue Type: Bug
>          Components: Diagnostics, Usability
>            Reporter: Taylor Wise
>            Priority: Major
>              Labels: verified
>             Fix For: 3.5.0
>
>
> The expected warning according to the test is the following:
> element.e is an optional element or a variable-occurrence array and its alignment (2) is not the same as element.one's alignment (1)
> No error or warning is received.
> edu.illinois.ncsa.daffodil.section12.aligned_data  
> under the 'new' folder: test_alignmentOptionalElem03()



--
This message was sent by Atlassian Jira
(v8.20.10#820010)