Author |
Message
|
timber |
Posted: Tue Jan 15, 2019 2:20 am Post subject: |
|
|
 Grand Master
Joined: 25 Aug 2015 Posts: 1292
|
The structure of your schema is not the same as my proposal. The complex element with the dfdl:length={../lengthField-4} needs to come after the length field. |
|
Back to top |
|
 |
petervh1 |
Posted: Tue Jan 15, 2019 10:20 pm Post subject: |
|
|
Centurion
Joined: 19 Apr 2010 Posts: 135
|
I've redone the structure according to what I think you recommended:
Code: |
<xsd:element dfdl:initiator="" maxOccurs="unbounded" name="Type14">
<xsd:complexType>
<xsd:sequence dfdl:separator="">
<xsd:element dfdl:initiator="14.001:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.LEN"
dfdl:textNumberPattern="#0" type="xsd:nonNegativeInteger"/>
<xsd:sequence>
<xsd:element dfdl:length="{../T14.LEN - 4}" dfdl:lengthKind="explicit" name="field1">
<xsd:complexType>
<xsd:sequence dfdl:separator="">
<xsd:element dfdl:initiator="14.002:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.IDC" type="xsd:string"/>
<xsd:element dfdl:initiator="14.003:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.IMP" type="xsd:string"/>
<xsd:element dfdl:initiator="14.004:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.SRC" type="xsd:string"/>
<xsd:element dfdl:initiator="14.005:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.TCD">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:terminator="">
<xsd:element dfdl:terminator="%#x1F;" name="T14.005.1" type="xsd:string"/>
<xsd:element name="T14.005.2" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:initiator="14.006:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.HLL" type="xsd:string"/>
<xsd:element dfdl:initiator="14.007:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.VLL" type="xsd:string"/>
<xsd:element dfdl:initiator="14.008:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.SLC" type="xsd:string"/>
<xsd:element dfdl:initiator="14.009:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.HPS" type="xsd:string"/>
<xsd:element dfdl:initiator="14.010:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.VPS" type="xsd:string"/>
<xsd:element dfdl:initiator="14.011:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.GCA" type="xsd:string"/>
<xsd:element dfdl:initiator="14.012:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.BPX" type="xsd:string"/>
<xsd:element dfdl:initiator="14.013:" dfdl:terminator="%#x1D;" minOccurs="1" name="T14.FGP" type="xsd:string"/>
<xsd:element dfdl:initiator="14.020:" dfdl:terminator="%#x1D;" minOccurs="0" name="T14.COM" type="xsd:string"/>
<xsd:element dfdl:initiator="14.999:" dfdl:lengthKind="delimited" minOccurs="1"
name="T14.DAT" type="xsd:hexBinary"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
|
This does not save properly - it returns an error message:
Quote: |
CTDV1524E : For a complex element, when 'lengthKind' is 'explicit' or 'prefixed', and 'lengthUnits' is characters, all simple child elements must have text representation, 'lengthUnits' set to 'characters' and the same encoding. Element: #xscd(/schemaElement::NIST_AUT_IN_V0.3/type::0/model::sequence/schemaElement::Type14/type::0/model::sequence/model::sequence/schemaElement::field1/type::0/model::sequence/schemaElement::T14.DAT).
|
If I change the type= for the binary field (T14.DAT) to string, the DFDL saves, but when I run a Test Parse I get:
Quote: |
CTDP3011E: Character decoding error: The sequence of bytes starting at byte offest '463' is not a valid character in the encoding 'US-ASCII'
|
|
|
Back to top |
|
 |
timber |
Posted: Wed Jan 16, 2019 1:29 am Post subject: |
|
|
 Grand Master
Joined: 25 Aug 2015 Posts: 1292
|
Good - that's progress.
US-ASCII is a 7-bit encoding, so any byte with a value >127 will trigger that error. You should set the encoding on the binary field to 'ISO-8859-1' (as I recommended earlier in this thread). |
|
Back to top |
|
 |
petervh1 |
Posted: Wed Jan 16, 2019 1:53 am Post subject: |
|
|
Centurion
Joined: 19 Apr 2010 Posts: 135
|
When I add dfdl:encoding=''ISO-8859-1" to the binary field I get the same CTDV1524E error as in my last post.
Quote: |
<xsd:element dfdl:initiator="14.999:" dfdl:lengthKind="delimited" minOccurs="1" dfdl:encoding="ISO-8859-1" name="T14.DAT" type="xsd:hexBinary"/>
|
|
|
Back to top |
|
 |
petervh1 |
Posted: Wed Jan 16, 2019 2:13 am Post subject: |
|
|
Centurion
Joined: 19 Apr 2010 Posts: 135
|
I get the same result with type="xsd:string" and dfdl:encoding="ISO-8859-1" |
|
Back to top |
|
 |
timber |
Posted: Wed Jan 16, 2019 7:01 am Post subject: |
|
|
 Grand Master
Joined: 25 Aug 2015 Posts: 1292
|
Please can you quote
- the full error message
- the byte value of the offending 'character' (should be able to work that out by using the offset quoted in the error message) |
|
Back to top |
|
 |
petervh1 |
Posted: Wed Jan 16, 2019 9:54 pm Post subject: |
|
|
Centurion
Joined: 19 Apr 2010 Posts: 135
|
When I code the binary string as follows:
Code: |
<xsd:element dfdl:initiator="14.999:" dfdl:lengthKind="delimited" minOccurs="1"
name="T14.DAT" type="xsd:string"/>
|
I get the following error during Test Parse:
Quote: |
17 Jan 2019, 7:30:10 AM info: Offset: 456. Found initiator '14.999:' for 'T14.DAT'
[dfdl = /NIST_Test/NIST_AUT_IN_V0.3.xsd, scd = #xscd(/schemaElement::NIST_AUT_IN_V0.3/type::0/model::sequence/schemaElement::Type14/type::0/model::sequence/model::sequence/schemaElement::field1/type::0/model::sequence/schemaElement::T14.DAT), 60]
17 Jan 2019, 7:30:10 AM error: CTDP3011E: Character decoding error. The sequence of bytes starting at byte offset '463' is not a valid character in the encoding 'US-ASCII' .
17 Jan 2019, 7:30:10 AM fatal: CTDP3011E: Character decoding error. The sequence of bytes starting at byte offset '463' is not a valid character in the encoding 'US-ASCII' .
|
The data starting at offset 463 (which is indeed the first byte after the 14.999: initiator) is:
Quote: |
C3BFC2A0C3BFC2A4203A0907200932C3
9326372009167EC2B5C3A8010906E280
94C3BEE2809D0109016BC3A9C3B92009
0241376820092EC3BF55C3B00109
|
|
|
Back to top |
|
 |
timber |
Posted: Thu Jan 17, 2019 12:29 am Post subject: |
|
|
 Grand Master
Joined: 25 Aug 2015 Posts: 1292
|
The answer is right there in the error message. The binary element is still using US-ASCII!
Try this:
Code: |
<xsd:element dfdl:initiator="14.999:" dfdl:lengthKind="delimited" minOccurs="1" name="T14.DAT" type="xsd:string" dfdl:encoding="ISO-8859-1"/> |
|
|
Back to top |
|
 |
petervh1 |
Posted: Thu Jan 17, 2019 1:14 am Post subject: |
|
|
Centurion
Joined: 19 Apr 2010 Posts: 135
|
When I code the binary element as per your last post, I get:
Quote: |
CTDV1524E : For a complex element, when 'lengthKind' is 'explicit' or 'prefixed', and 'lengthUnits' is characters, all simple child elements must have text representation, 'lengthUnits' set to 'characters' and the same encoding. Element: #xscd(/schemaElement::NIST_AUT_IN_V0.3/type::0/model::sequence/schemaElement::Type14/type::0/model::sequence/model::sequence/schemaElement::field1/type::0/model::sequence/schemaElement
|
when I try to save the xsd file. |
|
Back to top |
|
 |
timber |
Posted: Thu Jan 17, 2019 3:26 pm Post subject: |
|
|
 Grand Master
Joined: 25 Aug 2015 Posts: 1292
|
That's a pretty good error message. It tells you exactly what the problem is. I suggest that you use ISO-8859-1 throughout your schema - it is a superset of US-ASCII so the worst that can happen is that it tolerates some text that would otherwise have triggered a character decoding error. |
|
Back to top |
|
 |
petervh1 |
Posted: Mon Jan 21, 2019 3:19 am Post subject: |
|
|
Centurion
Joined: 19 Apr 2010 Posts: 135
|
I've got the parsing working now.
Thanks again for all your assistance. |
|
Back to top |
|
 |
|