The fn:normalize-space function is not supported by DFDL. DFDL only
implements a subset of XPath. This link has the list of supported functions:
https://daffodil.apache.org/docs/dfdl/#_Toc62570222
The fn:count function returns the number of "Line1.02-Satellite"
elements in the infoset. It does not have anything to do with the value
of the element. In this case, the result of fn:count will always be 1
because that's the count of that element in the infoset. That is never
greater than 6999 and so the error path will not be hit.
On 3/16/22 2:00 PM, Attila Horvath wrote:
Mike et al
See dev/users mail list for attached PDF.
In addition to unexpected <xs:unsignedInt> behavior, see unusual behavior re:
fn:count
dfdl:outputValueCalc ... if (~) then ~ else
Attila
On Wed, Mar 16, 2022 at 12:26 PM Mike Beckerle <[email protected]
<mailto:[email protected]>> wrote:
Created https://issues.apache.org/jira/browse/DAFFODIL-2676
<https://issues.apache.org/jira/browse/DAFFODIL-2676>
On Wed, Mar 16, 2022 at 12:21 PM Mike Beckerle <[email protected]
<mailto:[email protected]>> wrote:
> Ok, I found the attachment. Sorry for the delay.
>
> The challenge here is you are thinking the
> xs:unsignedInt(../Line1.02-Satellite) call will tolerate whitespace.
Which
> it seems they do not.
>
> I think this is a Daffodil bug, as the constructors like xs:unsignedInt
> are supposed to work like they do in XPath, and the XPath functions spec
> says when converting from strings, that whitespace normalization
applies -
> which trims all leading and trailing whitespace. It's less clear
> about whether interior whitespace is collapsed, but definitely
> leading/trailing seem to be trimmed.
>
> So I'll add a JIRA ticket about this.
>
> For how to work around, I suggest parsing the satellite field not as a
> string, but as an unsignedInt from the start.
>
> So like:
>
> <xs:element name="satellite-num-range" type="xs:unsignedInt"
> dfdl:lengthKind="explicit" dfdl:length="5"
> dfdl:textTrimKind="padChar" dfdl:textPadKind="padChar"
> dfdl:textNumberPadCharacter="%SP;" dfdl:textNumberJustification="right"
> dfdl:textNumberPattern="####0"/>
>
> I didn't run this, but I think this will remove leading spaces, and add
> leading spaces to your 5 character element.
>
> Another way to express this, since you need only leading padding is
this:
>
> <xs:element name="satellite-num-range" type="xs:unsignedInt"
> dfdl:lengthKind="explicit" dfdl:length="5"
> dfdl:textNumberPattern="* ####0"/>
>
> In that textNumberPattern the "* " means spaces are the pad character to
> be used, and when there is no digit for the position of a "#" then the
pad
> character from the pattern (not the textNumberPadCharacter) is used.
>
> Both kinds of padding can be used together E.g., so you could have
number
> text right justified in a fixed-length field of width 6, using "*" to
pad
> to width 5 so that you can get " **123".
>
> <xs:element name="starPadNum" type="xs:unsignedInt"
> dfdl:lengthKind="explicit" dfdl:length="6"
> dfdl:textTrimKind="padChar" dfdl:textPadKind="padChar"
> dfdl:textNumberPadCharacter="%SP;" dfdl:textNumberJustification="right"
> dfdl:textNumberPattern="* ####0"/>
>
> I didn't run these, but this is, I believe, how it is supposed to work.
>
>
>
> On Tue, Mar 15, 2022 at 5:23 PM Attila Horvath
<[email protected] <mailto:[email protected]>>
> wrote:
>
>> Attachment can be found on
>> https://lists.apache.org/[email protected]
<https://lists.apache.org/[email protected]> list.
>> Not sure why it didn't show up on dev - I sent msg to both lists.
>>
>> On Tue, Mar 15, 2022 at 3:41 PM Mike Beckerle <[email protected]
<mailto:[email protected]>>
>> wrote:
>>
>> > No attached PDF.
>> >
>> > Removal of blanks from a number would normally be by way of DFDL
>> "padding"
>> > and "trimming" properties.
>> >
>> > You need dfdl:textNumberJustification property, also textTrimKind,
>> > textPadKind, textNumberPadCharacter.
>> >
>> > You can also use textNumberPattern to indicate that a number may have
>> > leading spaces or zeros, but this is mostly about output when those
>> leading
>> > zeros are required.
>> >
>> > Padding on left == Right Justified
>> > Padding on right == Left Justified
>> > Padding around both sides = Center Justified.
>> >
>> >
>> >
>> > On Tue, Mar 15, 2022 at 8:53 AM Attila Horvath <
>> [email protected] <mailto:[email protected]>
>> > >
>> > wrote:
>> >
>> > > Ping... any assistance appreciated - thx
>> > >
>> > > ---------- Forwarded message ---------
>> > > From: Attila Horvath <[email protected]
<mailto:[email protected]>>
>> > > Date: Mon, Mar 14, 2022 at 12:38 PM
>> > > Subject: string to integer conversion w/ leading blanks fails
>> > > To: <[email protected] <mailto:[email protected]>>,
<[email protected] <mailto:[email protected]>>
>> > >
>> > >
>> > > ALCON
>> > >
>> > > Can someone pls suggest a way to convert string to integer if/when
>> > leading
>> > > blanks are present?
>> > >
>> > > My attempts are failing - see attached pdf for more details.
>> > >
>> > > Thx in advance
>> > >
>> > > Attila
>> > >
>> >
>>
>