
Mike I think this would work if you used a fixed array. Then minOccurs = maxOccurs and you could use output defaulting rules to create the array. Regards Steve Hanson Architect, IBM Data Format Description Language (DFDL) Co-Chair, OGF DFDL Working Group IBM SWG, Hursley, UK smh@uk.ibm.com tel:+44-1962-815848 From: Mike Beckerle <mbeckerle.dfdl@gmail.com> To: dfdl-wg@ogf.org, Date: 04/06/2013 21:44 Subject: [DFDL-WG] outputValueCalc to compute array elements - not possible? Sent by: dfdl-wg-bounces@ogf.org I want to create an array of short strings from a single long string using outputValueCalc. Let's call the initial single long string s. I want the max length of each short string to be m. So ceiling(s/m) is the number of array elements. Given m, it should be clear that each array element's contents can be computed as a specific sub-string of s, determined using m, and the index of the array element within the array, i.e., the position() function in XPath. The substring starts at m*(position() - 1), the end is length(s) - m*(position() -1) if position is ceiling(s/m), and start + m otherwise. However, current rules in the spec say that elements must exist in the infoset to be unparsed unless they are filled in by way of defaulting up to minOccurs. In my scenario I don't want to default them, I want to compute their values, but I do want to start with an infoset which has zero of the array elements pre-existing. I'm pretty sure there is no way for DFDL to will n array-elements into existence in the augmented infoset just knowing n, such that they then can each compute their sub-element's values using outputValueCalc. Also I think we currently don't allow outputValueCalc on an array element anyway. But my array element could be a complex type containing an element with an outputValueCalc. So I think there is no way to achieve what I want, eventhough there's no issue with figuring out how many array elements there should be nor any issue with figuring out the contents of each array element. I raise this by way of wanting to be able to unparse somehow, anything I can parse. I can parse a variable-length array of strings, and compute a string which is their concatenation. It's tricky but doable. I cannot break up a long string into pieces which are in an array. -- Mike Beckerle | OGF DFDL Workgroup Co-Chair | Tresys Technology | www.tresys.com -- dfdl-wg mailing list dfdl-wg@ogf.org https://www.ogf.org/mailman/listinfo/dfdl-wg 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