
Alex What you suggest makes sense. There is an implicit limitation with "prefixed" in that I can parse an element with an odd number of bits (say 13) but be unable to serialize exactly what had been parsed. I don't think there's anything you can do about that, other than use "explicit" with an expression as Tim says. However, I think what you have noted is an issue for all "prefixed" binary rep data, not just lengthUnits "bits". Take a look at Table 16 in section 12.3.5. This was added to handle the same issue for lengthKind "pattern" where all we have is the infoset data. The rightmost column says what to output for binary reps (in practice, it is virtually identical to Table 15 for "implicit" in section 12.3.3). We need this for "prefixed" too. Further, some of the rows in Table 16 are needed for "delimited". Delimited binary data is permitted under a couple of circumstances - when the binary rep is "packed" or "BCD". Section 12.3.2 does not cover what to output for binary reps. Note that errata 3.9 effectively removes Table 16 as "pattern" no longer supports binary rep data. The information in the text column is still needed though, but a closer examination says it is incorrect, as it should take into account dfdl:textOutputMinLength or xs:minLength (see wording in 12.3.2 for "delimited" and 12.3.4 for "prefixed"). Let's discuss on next DFDL WG call. Regards Steve Hanson Architect, Data Format Description Language (DFDL) Co-Chair, OGF DFDL Working Group IBM SWG, Hursley, UK smh@uk.ibm.com tel:+44-1962-815848 From: Tim Kimber/UK/IBM To: Alex Wood1/UK/IBM@IBMGB Cc: Steve Hanson/UK/IBM@IBMGB Date: 23/03/2012 21:55 Subject: Re: lengthKind = prefixed and length in bits when serializing... Fair question. Off the cuff response is - follow lengthKind=implicit rules for lengthKind=prefixed - if that's not what the modeller wants then they can always use lengthKind=explicit with an expression and model the prefix length as a separate element. Then they can use an outputValueCalc expression on the length element to produce whatever result they require. regards, Tim Kimber, Common Transformation Team, Hursley, UK Internet: kimbert@uk.ibm.com Tel. 01962-816742 Internal tel. 246742 From: Alex Wood1/UK/IBM To: Steve Hanson/UK/IBM@IBMGB, Tim Kimber/UK/IBM@IBMGB Date: 23/03/2012 19:33 Subject: lengthKind = prefixed and length in bits when serializing... Hi Steve, Tim. Looking at one of Neil's defects for lengthKind = prefixed Case where lengthUnits = Bits How to we determine what length (in bits) to serialize from the value and logical type ? I could not find a clear definitive answer in the specification. On parsing it is clear that any length is OK as long as it is less than the natural length of the logical type. So the same rules as for lengthKind = explicit, only the length was parsed out of the prefix. On serializing, lengthKind = explicit and implicit have specific lengths to serialize. However lengthKind = prefixed does not have a length to work with. That's ok for lengthUnits = bytes or characters where we know the length of data we are putting in the bitstream. But for lengthKind = bits it's not so obvious. For example an integer value of 1 for an unsignedInt could be serialized in a length anything between 1 and 32 bits. One way would be to find the minimum number of bits we could use to serialized all significant bits of the value. However my instinct is that it ought to follow the lengthKind = implicit rules and serialize the number of bits for the logical types natural length. UnsignedLong 64 UnsignedInt 32 UnsignedShort 16 UnsignedByte 8 Boolean 32 Thoughts ? Kind Regards, - Alex Alex Wood - Software Engineer - WebSphere Message Broker Development Lab Advocate - PMI Mortage MP 211, IBM UK Labs, Hursley Park, Winchester, Hants. SO21 2JN. Tel: Internal 246272, External 01962 816272 Notes: Alex Wood1/UK/IBM@IBMGB e-mail: wooda@uk.ibm.com Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU