
James - answers in-line below. 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: "Garriss Jr., James P." <jgarriss@mitre.org> To: "dfdl-wg@ogf.org" <dfdl-wg@ogf.org>, Date: 08/10/2013 15:21 Subject: [DFDL-WG] How do I preserve order in an unordered list? Sent by: dfdl-wg-bounces@ogf.org (Sent on behalf of Roger Costello) Hi Folks, I am trying out the sequenceKind="unordered" property. I created this simple test: <xs:element name="Test"> <xs:complexType> <xs:sequence dfdl:sequenceKind="unordered" dfdl:separator="%SP;"> <xs:element name="A" type="xs:string" dfdl:initiator="A:" /> <xs:element name="B" type="xs:string" dfdl:initiator="B:" /> </xs:sequence> </xs:complexType> </xs:element> That schema says the input data must consist of A:___ and B:___, in any order. Here is sample input: B:Cat A:Dog I processed the input using the schema and here is the result that I got from Daffodil: <Test> <A>Dog</A> <B>Cat</B> </Test> Notice that the order of the input data changed in the result XML. This was quite surprising to me. Upon consulting the DFDL specification, it appears that the exhibited behavior is expected: ... a DFDL processor must sort the members of an unordered group into schema order when parsing. QUESTIONS: 1. Is this really the desired behavior? I would not expect parsing to alter the order of any data. From my XML Schema experience, I would be shocked if an XML Schema validator altered the order of markup in XML instances simply because the XML Schema specified <all> (unordered sequence). SMH: Yes it is the intended behaviour. It's because this is not xs:all, but xs:sequence with a DFDL annotation. As far as XSDL is concerned, it is a xs:sequence so the elements must appear in the sequence order (otherwise validation will fail). The original intent was to use xs:all but it imposes the restriction that maxOccurs = 1 on the elements in the group, precluding repeats, which was felt too restrictive, so it was not included in the DFDL subset of XSDL. 2. If we grant that this really is the desired behavior, then how do I create an unordered sequence in which DFDL parsing preserves the order of the data? In the above example, if the input data lists B:Cat first and A:Dog second, then how do I get that order preserved in the result XML? SMH: In DFDL 1.0 you use xs:choice within a repeating element. I agree this is not ideal but it does preserve the order, at the expense of introducing a parent element into the infoset. The latest revision of the DFDL spec is in Public Comment, you are very welcome to create a comment on the OGF site if you feel that xs:all should be supported - the link is http://redmine.ogf.org/projects/editor-pubcom/boards/15. /Roger-- 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