|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
ESQL: access value in a choice group with unknown sequence |
« View previous topic :: View next topic » |
Author |
Message
|
ottfried11 |
Posted: Tue Aug 06, 2013 10:33 am Post subject: ESQL: access value in a choice group with unknown sequence |
|
|
Apprentice
Joined: 28 Jun 2013 Posts: 29
|
Hi all,
I'm trying to parse the following messagebody, created with DFDL, in a Compute Node.
Code: |
refInSWEIOBody
choiceElement
structure14332
structureHeader
structureLength:CHARACTER:00117
reserviert:CHARACTER:24000
structureBody14332
messageStream
KTHANHandelsplatz
domain:CHARACTER:7
length:CHARACTER:003
value:CHARACTER:EUL
KTHANHandels_Waehrung
domain:CHARACTER:8
length:CHARACTER:003
value:CHARACTER:EUR
KTHANKZ_Covered
domain:CHARACTER:6
length:CHARACTER:001
value:CHARACTER:0
choiceElement
structure11013
structureHeader
structureLength:CHARACTER:00067
reserviert:CHARACTER:24000
structureBody11013
messageStream
KONTRKuerzel
domain:CHARACTER:7
length:CHARACTER:008
value:CHARACTER:K981895I
KTAUFWeitere_Weisungen
domain:CHARACTER:7
length:CHARACTER:DDD
KTAUFMitteilung_Kntrhnt
domain:CHARACTER:7
length:CHARACTER:DDD
SETLVBezeichnung
domain:CHARACTER:7
length:CHARACTER:017
value:CHARACTER:GB w/ Kumulierung
SETLVSettlement_Art
domain:CHARACTER:8
length:CHARACTER:002
value:CHARACTER:LZ
KTAUFSettlement_Text
domain:CHARACTER:7
length:CHARACTER:DDD
choiceElement
structure12856
structureHeader
structureLength:CHARACTER:00040
reserviert:CHARACTER:24000
structureBody12856
messageStream
IDENTInstrument_Schema
domain:CHARACTER:7
length:CHARACTER:004
value:CHARACTER:ISIN
IDENTInstrument_Ident
domain:CHARACTER:7
length:CHARACTER:012
value:CHARACTER:DE0005140008
and so on ....
|
I don't know how to access the different values of the defined structures.
Here a code snipit:
Code: |
DECLARE refInTUBHeader REFERENCE TO InputBody.SWEIOGesamt.ASP_TUB_Header;
DECLARE refInSWEIOBody REFERENCE TO InputBody.SWEIOGesamt.SWEIO;
IF refInSWEIOBody.*.structure11013 .structureBody11013.messageStream.KONTRKuerzel.length <> 'DDD' THEN
...
|
This does not work.
Accessing the choiceElemet with an index is not possible, since
the array index can vary from message to message. The structure sequence does not have to be the same.
If possible, I'm looking for a solution in ESQL and not Java with XPATH.
Last edited by ottfried11 on Wed Aug 07, 2013 12:18 am; edited 1 time in total |
|
Back to top |
|
 |
lancelotlinc |
Posted: Tue Aug 06, 2013 10:36 am Post subject: |
|
|
 Jedi Knight
Joined: 22 Mar 2010 Posts: 4941 Location: Bloomington, IL USA
|
Can you place a Trace node after your Input node so we can see what the Logical Message Tree looks like?
If you know what the LMT looks like, its easy to write ESQL to reference that tree structure. _________________ http://leanpub.com/IIB_Tips_and_Tricks
Save $20: Coupon Code: MQSERIES_READER |
|
Back to top |
|
 |
dogorsy |
Posted: Tue Aug 06, 2013 11:04 am Post subject: Re: ESQL: access value in a choice group with unknown sequen |
|
|
Knight
Joined: 13 Mar 2013 Posts: 553 Location: Home Office
|
ottfried11 wrote: |
Code: |
refInSWEIOBody.*.structure11013 .structureBody11013.messageStream.KONTRKuerzel.length <> 'DDD' THEN
...
|
|
The * after refInSWEIOBody is adding an extra level that I cannot see in the structure. If you mean to specify any namespace it should be refInSWEIOBody.*:structure11013 , or else remove it altogether
Or is choiceElement part of the structure ?...it would be easier if you posted the dfdl xsd rather than what you have posted above.
If you run a user trace, it will point you out to what the problem is. It probably will say something 'it could not navigate to element number X because it does not exist'
so then you will know which element in the path it is not locating.
PS: have you tried parsing the message using the toolkit DFDL editor ? If you do, on the right hand side you will see the message tree, and you can also switch to see as XML, which will help you to work out how to write your ESQL path |
|
Back to top |
|
 |
kimbert |
Posted: Tue Aug 06, 2013 12:47 pm Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Nice to see that you have got a reasonably complex DFDL model working, and have moved on to the next stage. Congratulations!
I think dogorsy is on the right lines. The best way to diagnose message flow errors is:
- use the debugger to find out *what* the message flow is doing.
- when you need to know *why* the message flow is doing it, switch to user trace + Trace nodes. Much more information about the underlying cause of the problem(s).
In your case, I suspect that you might want to use ESQL's SELECT function which allows querying of structures in really complex ways. It's ESQL's answer to XPath, but usually a lot more efficient ( cue for mqsiuser to jump in with a hearty 'amen' ). _________________ Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too. |
|
Back to top |
|
 |
mqsiuser |
Posted: Tue Aug 06, 2013 2:49 pm Post subject: |
|
|
 Yatiri
Joined: 15 Apr 2008 Posts: 637 Location: Germany
|
I have recently talked to a developer from SAP. He just said "XSLT is a performance killer" (meaning it kills the performance). This is something we learned and it wasn't obvious at all times (e.g. some time in the past)... it could have turned out different, but it didn't.
XPath is a contributing factor. Generally quering a message is obviously bringing performance down. Mqjeff, me and others would tend to always walk the messagetree (with REFERENCEs) to come/get to the desired field (and it's value(s)). _________________ Just use REFERENCEs |
|
Back to top |
|
 |
ottfried11 |
Posted: Wed Aug 07, 2013 2:14 am Post subject: |
|
|
Apprentice
Joined: 28 Jun 2013 Posts: 29
|
Hi all,
first of all: thanks for the quick responses.
I could not find a way to attach the trace log, so here it is (part of it):
Quote: |
(0x01000000:Name):DFDL = ( ['dfdl' : 0x7fd068118840]
(0x01000000:Name):SWEIOGesamt = (
(0x01000000:Name):ASP_TUB_Header = (
(0x03000000:NameValue):TUB-HDR-ANFANG = X'ff' (BLOB)
(0x03000000:NameValue):TUB-HEADER-LEN = '512' (CHARACTER)
(0x03000000:NameValue):TIMESTAMP = '2013-06-07-17.32.44.409333' (CHARACTER)
(0x03000000:NameValue):MANDANT = 'HTDE' (CHARACTER)
(0x03000000:NameValue):PROCESS-ID = 'D291776 POAX603 ' (CHARACTER)
(0x03000000:NameValue):ASP-ID = 'SWEIO ' (CHARACTER)
(0x03000000:NameValue):FILLER1 = ' 00000000220000004049' (CHARACTER)
(0x03000000:NameValue):ONLINE = 'O' (CHARACTER)
(0x03000000:NameValue):AUFBAU = 'ND ' (CHARACTER)
(0x03000000:NameValue):VERARBEITUNGS-KZ = ' ' (CHARACTER)
(0x03000000:NameValue):VERSION = '+0000000011' (CHARACTER)
(0x03000000:NameValue):SPRACHE = 'X ' (CHARACTER)
(0x03000000:NameValue):USER = 'D291776 ' (CHARACTER)
(0x03000000:NameValue):FILLER2 = 'TA 2013-06-07-17.32.44.393921 B ID=SWEIO,SUB-ID=, ' (CHARACTER)
(0x03000000:NameValue):TUB-HDR-ENDE = ' --->' (CHARACTER)
)
(0x01000000:Name):SWEIO = (
(0x01000000:Name):choiceElement = (
(0x01000000:Name):structure14332 = (
(0x01000000:Name):structureHeader = (
(0x03000000:NameValue):structureLength = '00117' (CHARACTER)
(0x03000000:NameValue):reserviert = '24000' (CHARACTER)
)
(0x01000000:Name):structureBody14332 = (
(0x01000000:Name):messageStream = (
(0x01000000:Name):KTHANHandelsplatz = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = '003' (CHARACTER)
(0x03000000:NameValue):value = 'EUL' (CHARACTER)
)
(0x01000000:Name):KTHANHandels_Waehrung = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = '003' (CHARACTER)
(0x03000000:NameValue):value = 'EUR' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_Covered = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_Ausserboerslich = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANHandelsart = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_Emission = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANOpen_Close = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANFliesshandelscode = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANLimithoehe = (
(0x03000000:NameValue):domain = '2' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANLimitzusatz = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_Warab = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_Anleiheerl_Ext = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_Interessewa_Ext = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANGueltigkeit = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANStoplimit = (
(0x03000000:NameValue):domain = '2' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANBetrag_angepasst = (
(0x03000000:NameValue):domain = '2' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANKZ_angepasst = (
(0x03000000:NameValue):domain = '6' (CHARACTER)
(0x03000000:NameValue):length = '001' (CHARACTER)
(0x03000000:NameValue):value = '0' (CHARACTER)
)
(0x01000000:Name):KTHANDeriv_Orderzusatz = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANTake_Up_Schema = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANTake_Up_Ident = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANTake_Up_Depot = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTHANTrade_Referenz = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
)
)
)
)
(0x01000000:Name):choiceElement = (
(0x01000000:Name):structure11013 = (
(0x01000000:Name):structureHeader = (
(0x03000000:NameValue):structureLength = '00067' (CHARACTER)
(0x03000000:NameValue):reserviert = '24000' (CHARACTER)
)
(0x01000000:Name):structureBody11013 = (
(0x01000000:Name):messageStream = (
(0x01000000:Name):KONTRKuerzel = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = '008' (CHARACTER)
(0x03000000:NameValue):value = 'K981895I' (CHARACTER)
)
(0x01000000:Name):KTAUFWeitere_Weisungen = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):KTAUFMitteilung_Kntrhnt = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
(0x01000000:Name):SETLVBezeichnung = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = '017' (CHARACTER)
(0x03000000:NameValue):value = 'GB w/ Kumulierung' (CHARACTER)
)
(0x01000000:Name):SETLVSettlement_Art = (
(0x03000000:NameValue):domain = '8' (CHARACTER)
(0x03000000:NameValue):length = '002' (CHARACTER)
(0x03000000:NameValue):value = 'LZ' (CHARACTER)
)
(0x01000000:Name):KTAUFSettlement_Text = (
(0x03000000:NameValue):domain = '7' (CHARACTER)
(0x03000000:NameValue):length = 'DDD' (CHARACTER)
)
)
)
)
)
(0x01000000:Name):choiceElement = (
(0x01000000:Name):structure16426 = (
(0x01000000:Name):structureHeader = (
(0x03000000:NameValue):structureLength = '00168' (CHARACTER)
(0x03000000:NameValue):reserviert = '24000' (CHARACTER)
)
(0x01000000:Name):structureBody = (
(0x03000000:NameValue):messageStream = '7003EUL8003EUR8DDD600102DDD8DDD8DDD600106001060010600106001060010600108DDD7DDD8DDD7DDD2DDD8DDD2DDD8DDD8DDD7DDD7DDD7DDD2DDD60010600107DDD2DDD2DDD8DDD8DDD' (CHARACTER)
)
)
)
(0x01000000:Name):choiceElement = (
(0x01000000:Name):structure15244 = (
(0x01000000:Name):structureHeader = (
(0x03000000:NameValue):structureLength = '00021' (CHARACTER)
(0x03000000:NameValue):reserviert = '24000' (CHARACTER)
)
(0x01000000:Name):structureBody = (
(0x03000000:NameValue):messageStream = '60010' (CHARACTER)
)
)
)
|
My Problem is, that I dont't know how to access the choiceElement. If the tree would always hace the same sequence, I could use an index (choiceElement[1], choiceElement[2]...) to access the fields. But there is no fixed sequence.
Here my xsd:
Quote: |
<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:ibmDfdlExtn="http://www.ibm.com/dfdl/extensions" xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions" xmlns:recSepFieldsFmt="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" xmlns:tns="http://www.ibm.com/dfdl/ISO8583Types" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="IBMdefined/RecordSeparatedFieldFormat.xsd"/>
<xsd:annotation>
<xsd:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:format byteOrder="{$dfdl:byteOrder}" encoding="{$dfdl:encoding}" escapeSchemeRef="recSepFieldsFmt:RecordEscapeScheme" occursCountKind="fixed" ref="recSepFieldsFmt:RecordSeparatedFieldsFormat"/>
<!--
This is a named format block. Use these to avoid repeating the same property values on many components.
Define as many of these as you like, and refer to them using dfdl:ref on any element/type/group.
-->
<dfdl:defineFormat name="TLV_complexType">
<dfdl:format emptyValueDelimiterPolicy="none" initiator="" lengthKind="implicit"/>
</dfdl:defineFormat>
<dfdl:defineFormat name="TLV_sequence">
<dfdl:format separator="" sequenceKind="ordered"/>
</dfdl:defineFormat>
</xsd:appinfo>
</xsd:annotation>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:lengthKind="implicit" ibmDfdlExtn:docRoot="true" name="SWEIOGesamt">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="ASP_TUB_Header"/>
<xsd:element ref="SWEIO"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:lengthKind="implicit" name="ASP_TUB_Header">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="1" dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:representation="binary" ibmDfdlExtn:sampleValue="0F00" name="TUB-HDR-ANFANG" type="xsd:hexBinary"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="3" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaa" name="TUB-HEADER-LEN" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="26" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="TIMESTAMP" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="4" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaa" name="MANDANT" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="32" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="PROCESS-ID" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="50" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="ASP-ID" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="28" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="FILLER1" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="1" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="a" name="ONLINE" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="8" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaa" name="AUFBAU" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="1" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="a" name="VERARBEITUNGS-KZ" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="11" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaa" name="VERSION" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="4" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaa" name="SPRACHE" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="16" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaa" name="USER" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="322" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="FILLER2" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="5" dfdl:lengthKind="explicit" dfdl:textTrimKind="none" ibmDfdlExtn:sampleValue="aaaaa" name="TUB-HDR-ENDE" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="" dfdl:lengthKind="implicit" name="SWEIO">
<xsd:complexType>
<xsd:sequence dfdl:separator="">
<xsd:element dfdl:lengthKind="implicit" dfdl:occursCountKind="implicit" maxOccurs="unbounded" minOccurs="1" name="choiceElement">
<xsd:complexType>
<xsd:choice dfdl:initiatedContent="yes">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17840" dfdl:lengthKind="implicit" name="structure17840">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#18044" dfdl:lengthKind="implicit" name="structure18044">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11010" dfdl:lengthKind="implicit" name="structure11010">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17322" dfdl:lengthKind="implicit" name="structure17322">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14308" dfdl:lengthKind="implicit" name="structure14308">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16440" dfdl:lengthKind="implicit" name="structure16440">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#12998" dfdl:lengthKind="implicit" name="structure12998">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11005" dfdl:lengthKind="implicit" name="structure11005">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#13274" dfdl:lengthKind="implicit" name="structure13274">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11017" dfdl:lengthKind="implicit" name="structure11017">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#12856" dfdl:lengthKind="implicit" name="structure12856">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody12856"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#13280" dfdl:lengthKind="implicit" name="structure13280">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11013" dfdl:lengthKind="implicit" name="structure11013">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody11013"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#18202" dfdl:lengthKind="implicit" name="structure18202">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14332" dfdl:lengthKind="implicit" name="structure14332">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody14332"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14430" dfdl:lengthKind="implicit" name="structure14430">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14792" dfdl:lengthKind="implicit" name="structure14792">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16806" dfdl:lengthKind="implicit" name="structure16806">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17186" dfdl:lengthKind="implicit" name="structure17186">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17006" dfdl:lengthKind="implicit" name="structure17006">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17188" dfdl:lengthKind="implicit" name="structure17188">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17232" dfdl:lengthKind="implicit" name="structure17232">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17416" dfdl:lengthKind="implicit" name="structure17416">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17758" dfdl:lengthKind="implicit" name="structure17758">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17966" dfdl:lengthKind="implicit" name="structure17966">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody17966"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14862" dfdl:lengthKind="implicit" name="structure14862">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14788" dfdl:lengthKind="implicit" name="structure14788">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16228" dfdl:lengthKind="implicit" name="structure16228">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16316" dfdl:lengthKind="implicit" name="structure16316">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16862" dfdl:lengthKind="implicit" name="structure16862">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16822" dfdl:lengthKind="implicit" name="structure16822">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16966" dfdl:lengthKind="implicit" name="structure16966">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16018" dfdl:lengthKind="implicit" name="structure16018">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16570" dfdl:lengthKind="implicit" name="structure16570">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14394" dfdl:lengthKind="implicit" name="structure14394">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14392" dfdl:lengthKind="implicit" name="structure14392">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16096" dfdl:lengthKind="implicit" name="structure16096">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#15174" dfdl:lengthKind="implicit" name="structure15174">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14764" dfdl:lengthKind="implicit" name="structure14764">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#12954" dfdl:lengthKind="implicit" name="structure12954">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16830" dfdl:lengthKind="implicit" name="structure16830">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11011" dfdl:lengthKind="implicit" name="structure11011">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17970" dfdl:lengthKind="implicit" name="structure17970">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#12340" dfdl:lengthKind="implicit" name="structure12340">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#12858" dfdl:lengthKind="implicit" name="structure12858">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17986" dfdl:lengthKind="implicit" name="structure17986">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17036" dfdl:lengthKind="implicit" name="structure17036">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14762" dfdl:lengthKind="implicit" name="structure14762">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11003" dfdl:lengthKind="implicit" name="structure11003">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17280" dfdl:lengthKind="implicit" name="structure17280">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17240" dfdl:lengthKind="implicit" name="structure17240">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#15386" dfdl:lengthKind="implicit" name="structure15386">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17650" dfdl:lengthKind="implicit" name="structure17650">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17836" dfdl:lengthKind="implicit" name="structure17836">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody17836"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#17862" dfdl:lengthKind="implicit" name="structure17862">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#18046" dfdl:lengthKind="implicit" name="structure18046">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody18046"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#12678" dfdl:lengthKind="implicit" name="structure12678">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#11012" dfdl:lengthKind="implicit" name="structure11012">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#16426" dfdl:lengthKind="implicit" name="structure16426">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#15244" dfdl:lengthKind="implicit" name="structure15244">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="#14852" dfdl:lengthKind="implicit" name="structure14852">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element ref="structureHeader"/>
<xsd:element ref="structureBody"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Global elements for re-use -->
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="" dfdl:lengthKind="implicit" name="structureHeader">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="5" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:sampleValue="aaa" name="structureLength">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="5"/>
<xsd:maxLength value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="5" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:sampleValue="aaaaa" name="reserviert">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="5"/>
<xsd:maxLength value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:initiator="" dfdl:lengthKind="implicit" name="structureBody">
<xsd:complexType>
<xsd:sequence dfdl:separator="" dfdl:sequenceKind="ordered">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(../../structureHeader/structureLength)-16}" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:maxOccurs="1" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="messageStream">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:minLength value="0"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- This is a global complex type -->
<xsd:complexType name="TLV_type_mandatory">
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="1" dfdl:lengthKind="explicit" name="domain" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="3" dfdl:lengthKind="explicit" name="length" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(if (../length eq 'DDD') then 0 else ../length)}" dfdl:lengthKind="explicit" minOccurs="1" name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TLV_type_optional">
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="1" dfdl:lengthKind="explicit" name="domain" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="3" dfdl:lengthKind="explicit" name="length" type="xsd:string"/>
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(if (../length eq 'DDD') then 0 else ../length)}" dfdl:lengthKind="explicit" dfdl:occursCountKind="implicit" minOccurs="0" name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<!-- specific emlement definitions -->
<xsd:element dfdl:ref="TLV_complexType" name="structureBody11013">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(../../structureHeader/structureLength)-16}" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:maxOccurs="1" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="messageStream">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element name="KONTRKuerzel" type="TLV_type_optional"/>
<xsd:element name="KTAUFWeitere_Weisungen" type="TLV_type_optional"/>
<xsd:element name="KTAUFMitteilung_Kntrhnt" type="TLV_type_optional"/>
<xsd:element name="SETLVBezeichnung" type="TLV_type_optional"/>
<xsd:element name="SETLVSettlement_Art" type="TLV_type_optional"/>
<xsd:element name="KTAUFSettlement_Text" type="TLV_type_optional"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:ref="TLV_complexType" name="structureBody12856">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(../../structureHeader/structureLength)-16}" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:maxOccurs="1" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="messageStream">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element name="IDENTInstrument_Schema" type="TLV_type_optional"/>
<xsd:element name="IDENTInstrument_Ident" type="TLV_type_optional"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:ref="TLV_complexType" name="structureBody14332">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(../../structureHeader/structureLength)-16}" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:maxOccurs="1" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="messageStream">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element name="KTHANHandelsplatz" type="TLV_type_optional"/>
<xsd:element name="KTHANHandels_Waehrung" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_Covered" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_Ausserboerslich" type="TLV_type_optional"/>
<xsd:element name="KTHANHandelsart" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_Emission" type="TLV_type_optional"/>
<xsd:element name="KTHANOpen_Close" type="TLV_type_optional"/>
<xsd:element name="KTHANFliesshandelscode" type="TLV_type_optional"/>
<xsd:element name="KTHANLimithoehe" type="TLV_type_optional"/>
<xsd:element name="KTHANLimitzusatz" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_Warab" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_Anleiheerl_Ext" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_Interessewa_Ext" type="TLV_type_optional"/>
<xsd:element name="KTHANGueltigkeit" type="TLV_type_optional"/>
<xsd:element name="KTHANStoplimit" type="TLV_type_optional"/>
<xsd:element name="KTHANBetrag_angepasst" type="TLV_type_optional"/>
<xsd:element name="KTHANKZ_angepasst" type="TLV_type_optional"/>
<xsd:element name="KTHANDeriv_Orderzusatz" type="TLV_type_optional"/>
<xsd:element name="KTHANTake_Up_Schema" type="TLV_type_optional"/>
<xsd:element name="KTHANTake_Up_Ident" type="TLV_type_optional"/>
<xsd:element name="KTHANTake_Up_Depot" type="TLV_type_optional"/>
<xsd:element name="KTHANTrade_Referenz" type="TLV_type_optional"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element dfdl:ref="TLV_complexType" name="structureBody17836">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element dfdl:emptyValueDelimiterPolicy="none" dfdl:length="{xs:nonNegativeInteger(../../structureHeader/structureLength)-16}" dfdl:lengthKind="explicit" dfdl:nilValueDelimiterPolicy="none" ibmDfdlExtn:maxOccurs="1" ibmDfdlExtn:sampleValue="aaaaaaaaaaaaaaaaaaaa" name="messageStream">
<xsd:complexType>
<xsd:sequence dfdl:ref="TLV_sequence">
<xsd:element name="MANDMAND_Id" type="TLV_type_optional"/>
<xsd:element name="WEITAReferenz" type="TLV_type_optional"/>
<xsd:element name="WEITATyp" type="TLV_type_optional"/>
<xsd:element name="WEITAGeschaeftsart" type="TLV_type_optional"/>
<xsd:element name="WEITAGegenwert" type="TLV_type_optional"/>
<xsd:element name="WEITAGegenwert_Whg" type="TLV_type_optional"/>
<xsd:element name="WEITAVersendung_Datum" type="TLV_type_optional"/>
<xsd:element name="WEITAVersendung_Zeit" type="TLV_type_optional"/>
<xsd:element name="WEITAGilt_Von_Datum" type="TLV_type_optional"/>
<xsd:element name="WEITAGilt_Von_Zeit" type="TLV_type_optional"/>
<xsd:element name="WEITAGilt_Bis_Datum" type="TLV_type_optional"/>
<xsd:element name="WEITAGilt_Bis_Zeit" type="TLV_type_optional"/>
<xsd:element name="WEITAPhase" type="TLV_type_optional"/>
<xsd:element name="WEITAAuftragsstatus" type="TLV_type_optional"/>
<xsd:element name="WEITAAuftrags_Nr_Fremd2" type="TLV_type_optional"/>
<xsd:element name="WEITANummer" type="TLV_type_optional"/>
<xsd:element name="WEITAErfassungsdatum" type="TLV_type_optional"/>
<xsd:element name="WEITAErfassungszeit" type="TLV_type_optional"/>
<xsd:element name="WEITAMenge" type="TLV_type_optional"/>
<xsd:element name="WEITAMengen_Einheit" type="TLV_type_optional"/>
<xsd:element name="WEITADisponent" type="TLV_type_optional"/>
<xsd:element name="WEITABetreuende_Stelle" type="TLV_type_optional"/>
<xsd:element name="WEITAORGEH_Code" type="TLV_type_optional"/>
<xsd:element name="WEITAAenderungsdatum" type="TLV_type_optional"/>
<xsd:element name="WEITAAenderungszeit" type="TLV_type_optional"/>
<xsd:element name="WEITABearbeitungsdatum" type="TLV_type_optional"/>
<xsd:element name="WEITABearbeitungszeit" type="TLV_type_optional"/>
<xsd:element name="WEITAFunktionstyp" type="TLV_type_optional"/>
<xsd:element name="WEITAFehlercode" type="TLV_type_optional"/>
<xsd:element name="WEITAAblehnungsgrund" type="TLV_type_optional"/>
<xsd:element name="WEITAUebermittlungsweg" type="TLV_type_optional"/>
<xsd:element name="WEITAAdr_Inhalt" type="TLV_type_optional"/>
<xsd:element name="WEITAAuftragnehmer" type="TLV_type_optional"/>
<xsd:element name="WEITAEmpfaenger_Typ" type="TLV_type_optional"/>
<xsd:el |
|
Back to top |
|
 |
dogorsy |
Posted: Wed Aug 07, 2013 2:45 am Post subject: |
|
|
Knight
Joined: 13 Mar 2013 Posts: 553 Location: Home Office
|
ok, so the problem is that you have a unbound sequence of elements, which can be one of a choice.
so what I would do, is a for loop, for example:
Code: |
FOR source as SWEIOGesamt.SWEIO.choiceElement[] DO
CASE FIELDNAME(source.*)
WHEN 'structureBody14332'
do something
WHEN 'structureBody14335'
do something else
END CASE;
END FOR;
|
sorry the formatting has gone mad... don't know how to fix it... |
|
Back to top |
|
 |
kimbert |
Posted: Wed Aug 07, 2013 4:34 am Post subject: |
|
|
 Jedi Council
Joined: 29 Jul 2003 Posts: 5542 Location: Southampton
|
Quote: |
My Problem is, that I dont't know how to access the choiceElement. |
...and our problem is that we don't know *why* you want to access the choiceElement.
Obviously, it would be easy to iterate over all of the choiceElements in InputRoot using a REFERENCE or a FOR loop ( I have just seen dogorsy's reply). But I think you want a specific instance of choiceElement - and you have not told us what the query criteria are ( or did I miss it? ). _________________ Before you criticize someone, walk a mile in their shoes. That way you're a mile away, and you have their shoes too. |
|
Back to top |
|
 |
dogorsy |
Posted: Wed Aug 07, 2013 4:46 am Post subject: |
|
|
Knight
Joined: 13 Mar 2013 Posts: 553 Location: Home Office
|
kimbert wrote: |
Quote: |
My Problem is, that I dont't know how to access the choiceElement. |
...and our problem is that we don't know *why* you want to access the choiceElement.
Obviously, it would be easy to iterate over all of the choiceElements in InputRoot using a REFERENCE or a FOR loop ( I have just seen dogorsy's reply). But I think you want a specific instance of choiceElement - and you have not told us what the query criteria are ( or did I miss it? ). |
it would be nice if in DFDL we could say
Code: |
<xsd:choice dfdl:initiatedContent="yes" maxOccurs="unbounded">
|
and do without the extra level (choiceElement)
then we would have an xml like
Code: |
<SWEIO>
<structure14332>whatever here</structure14332>
<structure11013>some stuff</structure11013>
more elements
</SWEIO> |
or maybe it is possible but I don't know how to....
Interestingly, the DFDL spec only says that minOccurs MUST be greater than 0, so it could be any positive integer, which in turn means maxOccurs MUST be greater or equal to minOccurs... so no reason why it could not be unbounded...
But I guess that could be achieved with an unordered sequence, unfortunately not implemented...  |
|
Back to top |
|
 |
ottfried11 |
Posted: Wed Aug 07, 2013 6:13 am Post subject: |
|
|
Apprentice
Joined: 28 Jun 2013 Posts: 29
|
Hi all,
this seems to work fine:
Code: |
DECLARE refInSWEIOBody REFERENCE TO InputBody.SWEIOGesamt.SWEIO;
DECLARE iSWEIOCount INTEGER 0;
...
FOR source as refInSWEIOBody.choiceElement[] DO
SET iSWEIOCount = iSWEIOCount + 1;
CASE FIELDNAME(source.*)
WHEN 'structure14332' THEN
IF refInSWEIOBody.choiceElement[iSWEIOCount].structure14332.structureBody14332.messageStream.KTHANLimithoehe.length = 'DDD' THEN
SET chKTHANLimithoehe = '0';
ELSE
SET chKTHANLimithoehe = refInSWEIOBody.choiceElement[iSWEIOCount].structure14332.structureBody14332.messageStream.KTHANLimithoehe.value;
END IF;
WHEN 'structure17836' THEN
IF refInSWEIOBody.choiceElement[iSWEIOCount].structure17836.structureBody17836.messageStream.WEITAFunktionstyp.length <> 'DDD' THEN
SET chWEITAFunktionstyp = refInSWEIOBody.choiceElement[iSWEIOCount].structure17836.structureBody17836.messageStream.WEITAFunktionstyp.value;
ELSE
SET chWEITAFunktionstyp = 'ORD';
END IF;
SET chWEITANummer = refInSWEIOBody.choiceElement[iSWEIOCount].structure17836.structureBody17836.messageStream.WEITANummer.value;
WHEN 'structure12856' THEN
SET chIDENTInstrument_Ident = refInSWEIOBody.choiceElement[iSWEIOCount].structure12856.structureBody12856.messageStream.IDENTInstrument_Ident.value;
END CASE;
END FOR;
|
Is there any way of accessing source directly?
I tried
Code: |
source.structure14332.structureBody14332.messageStream.KTHANLimithoehe.length
|
and
Code: |
source.structureBody14332.messageStream.KTHANLimitho
|
and the compiler had no problem with it. But I could not access the nodes. Thats why I implemented the counter.
Thats also what I meant by "can not accessi the choiceElement".
@dogorsy: an unordered sequence would be perfect for this use case.
Thanks again for your help.
Please let me know if I can can code it in aq better way |
|
Back to top |
|
 |
dogorsy |
Posted: Wed Aug 07, 2013 6:23 am Post subject: |
|
|
Knight
Joined: 13 Mar 2013 Posts: 553 Location: Home Office
|
you don't need the counter, source is a dynamic reference that is pointing to refInSWEIOBody.choiceElement
so you can code
Code: |
CASE FIELDNAME(source.*)
WHEN 'structure14332' THEN
IF source.structure14332.structureBody14332.messageStream.KTHANLimithoehe.length = 'DDD'
|
etc. |
|
Back to top |
|
 |
ottfried11 |
Posted: Wed Aug 07, 2013 6:31 am Post subject: |
|
|
Apprentice
Joined: 28 Jun 2013 Posts: 29
|
I tried that.
it always points to the first choiceElement, which in this case is the 14332 structure.
How would you DECLARE the source variable?
I did not DECLARE it at all. |
|
Back to top |
|
 |
mqjeff |
Posted: Wed Aug 07, 2013 6:32 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
Every time you have anything that uses a counter in a [], you can AND SHOULD replace it with a reference.
Your initial for loop creates a reference. You can MOVE that to an appropriate child element if you want. You can also create a NEW reference, either manually or by creating a second for loop.
None of this really has to do with the fact that you're using a choice.
You could replace your CASE statement with a set of for loops, one for each case. if there were no elements that matched that, then the loop would execute zero times.
I'm not saying it's a good idea - nor am I saying it's a bad idea either. I'm saying it's an idea.
I leave commentary on whether DFDL lets you create a repeating complex type directly without having to instantiate that type into an element to my esteemed colleagues. I suspect nobody will be surprised to find out it works the same way as XSD does... |
|
Back to top |
|
 |
dogorsy |
Posted: Wed Aug 07, 2013 6:39 am Post subject: |
|
|
Knight
Joined: 13 Mar 2013 Posts: 553 Location: Home Office
|
ottfried11 wrote: |
I tried that.
it always points to the first choiceElement, which in this case is the 14332 structure.
How would you DECLARE the source variable?
I did not DECLARE it at all. |
you do not declare the reference, as I said, it is dynamic.
and no, it should not point always to the same element,
try something simple
Code: |
FOR source as refInSWEIOBody.choiceElement[] DO
CREATE LASTCHILD OF OutputRoot.XMLNSC.Test NAME 'MyField';
SET OutputRoot.XMLNSC.Test.MyField[<] = FIELDNAME(source.*);
END FOR;
and post the result |
and the proof that it works is that you said in the post above that it works, so source.* is pointing to each of the elements in turn. So it is very likely that you are doing something wrong when using source.etc.etc |
|
Back to top |
|
 |
j.f.sorge |
Posted: Wed Aug 07, 2013 7:01 am Post subject: |
|
|
Master
Joined: 27 Feb 2008 Posts: 218
|
Why not use the following code (it should work although I did not use WMBT to create it)
Code: |
DECLARE refSource REFERENCE TO refInSWEIOBody.choiceElement[1];
WHILE LASTMOVE(refSource) DO
--FOR source as refInSWEIOBody.choiceElement[] DO
DECLARE refChild REFERENCE TO refSource.<; --will point to FIRSTCHILD
--SET iSWEIOCount = iSWEIOCount + 1;
DECLARE chChild CHARACTER FIELDNAME(refChild);
--CASE FIELDNAME(source.*)
CASE chChild
WHEN 'structure14332' THEN
--IF refInSWEIOBody.choiceElement[iSWEIOCount].structure14332.structureBody14332.messageStream.KTHANLimithoehe.length = 'DDD' THEN
IF refChild.structureBody14332.messageStream.KTHANLimithoehe.length = 'DDD' THEN
SET chKTHANLimithoehe = '0';
ELSE
--SET chKTHANLimithoehe = refInSWEIOBody.choiceElement[iSWEIOCount].structure14332.structureBody14332.messageStream.KTHANLimithoehe.value;
SET chKTHANLimithoehe = refChild.structureBody14332.messageStream.KTHANLimithoehe.value;
END IF;
WHEN 'structure17836' THEN
--IF refInSWEIOBody.choiceElement[iSWEIOCount].structure17836.structureBody17836.messageStream.WEITAFunktionstyp.length <> 'DDD' THEN
IF refChild.structureBody17836.messageStream.WEITAFunktionstyp.length <> 'DDD' THEN
--SET chWEITAFunktionstyp = refInSWEIOBody.choiceElement[iSWEIOCount].structure17836.structureBody17836.messageStream.WEITAFunktionstyp.value;
SET chWEITAFunktionstyp = refChild.structureBody17836.messageStream.WEITAFunktionstyp.value;
ELSE
SET chWEITAFunktionstyp = 'ORD';
END IF;
--SET chWEITANummer = refInSWEIOBody.choiceElement[iSWEIOCount].structure17836.structureBody17836.messageStream.WEITANummer.value;
SET chWEITANummer = refChild.structureBody17836.messageStream.WEITANummer.value;
WHEN 'structure12856' THEN
--SET chIDENTInstrument_Ident = refInSWEIOBody.choiceElement[iSWEIOCount].structure12856.structureBody12856.messageStream.IDENTInstrument_Ident.value;
SET chIDENTInstrument_Ident = refChild.structureBody12856.messageStream.IDENTInstrument_Ident.value;
END CASE;
MOVE refSource NEXTSIBLING REPEAT NAME;
--END FOR;
END WHILE; |
_________________ IBM Certified Solution Designer - WebSphere MQ V6.0
IBM Certified Solution Developer - WebSphere Message Broker V6.0
IBM Certified Solution Developer - WebSphere Message Broker V6.1
IBM Certified Solution Developer - WebSphere Message Broker V7.0 |
|
Back to top |
|
 |
|
|
 |
Goto page 1, 2, 3, 4 Next |
Page 1 of 4 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|
|
Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group
Copyright © MQSeries.net. All rights reserved.
|
|
|
|
|
|