| Author |
Message
|
| akashdwolf |
Posted: Mon Oct 15, 2018 9:51 am Post subject: Remove extra comma from fixed length output using DFDL |
|
|
Apprentice
Joined: 09 Feb 2017 Posts: 28 Location: Mumbai
|
I am doing XML to Fixed Length Conversion using DFDL.
I need to create 3 lines for 3 incoming complexTypes and do padding for all the elements with a space.
I am able to do this but after every element a comma is added,I need help to remove the comma.
Below is the flow order:
HTTPInput -->Comput-->Fileoutput
Below is the esql code:
CREATE COMPUTE MODULE TEST_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot.DFDL = InputRoot.XMLNSC;
END;
END MODULE;
Below is the DFDL:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ibmDfdlExtn="http://www.ibm.com/dfdl/extensions" xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions" xmlns:recSepFieldsFmt="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat">
<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 encoding="{$dfdl:encoding}" escapeSchemeRef="" occursCountKind="implicit" ref="recSepFieldsFmt:RecordSeparatedFieldsFormat" />
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType name="Header">
<xsd:sequence dfdl:sequenceKind="ordered" dfdl:separatorPolicy="suppressedAtEndLax">
<xsd:element dfdl:length="30" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="Structure" type="xsd:string" />
<xsd:element dfdl:length="10" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="Action" type="xsd:string" />
<xsd:element dfdl:length="20" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoCreated" type="xsd:string" />
<xsd:element dfdl:length="26" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoCreatedTS" type="xsd:string" />
<xsd:element dfdl:length="20" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoUpdated" type="xsd:string" />
<xsd:element dfdl:length="26" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="UserWhoUpdatedTS" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Entity">
<xsd:sequence dfdl:sequenceKind="ordered">
<xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="businessName" type="xsd:string" />
<xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="address1" type="xsd:string" />
<xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="address2" type="xsd:string" />
<xsd:element dfdl:length="40" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="city" type="xsd:string" />
<xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="state" type="xsd:string" />
<xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="country" type="xsd:string" />
<xsd:element dfdl:length="11" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="postalCode" type="xsd:string" />
<xsd:element dfdl:length="15" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="phone" type="xsd:string" />
<xsd:element dfdl:length="10" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="phoneExtension" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="PersonalDetails">
<xsd:sequence dfdl:sequenceKind="ordered">
<xsd:element dfdl:length="50" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="Name" type="xsd:string" />
<xsd:element dfdl:length="40" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="city" type="xsd:string" />
<xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="state" type="xsd:string" />
<xsd:element dfdl:length="3" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="country" type="xsd:string" />
<xsd:element dfdl:length="11" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="postalCode" type="xsd:string" />
<xsd:element dfdl:length="15" dfdl:textPadKind="padChar" dfdl:lengthKind="explicit" name="phone" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CustomerRequest">
<xsd:sequence dfdl:sequenceKind="ordered">
<xsd:element dfdl:terminator="%CR;%LF;" name="Header" nillable="false" type="Header" />
<xsd:element dfdl:terminator="%CR;%LF;" name="corporateEntity" nillable="false" type="Entity" maxOccurs="1" />
<xsd:element dfdl:terminator="%CR;%LF;" name="PersonalDetails" nillable="false" type="PersonalDetails" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:element dfdl:lengthKind="implicit" ibmSchExtn:docRoot="true" name="CreateCustomerRequest" type="CustomerRequest" />
</xsd:schema>
Input Request:
<CreateCustomerRequest>
<Header>
<Structure></Structure>
<Action>CREATE</Action>
<UserWhoCreated>TEST</UserWhoCreated>
<UserWhoCreatedTS>0001-01-01-00.00.00.000000</UserWhoCreatedTS>
<UserWhoUpdated>TEST</UserWhoUpdated>
<UserWhoUpdatedTS>0001-01-01-00.00.00.000000</UserWhoUpdatedTS>
</Header>
<corporateEntity>
<businessName>Marine International</businessName>
<address1>One Marine drive</address1>
<address2>One Marine drive</address2>
<city>Fort Lauradel</city>
<state>FL</state>
<country>USA</country>
<postalCode>32111</postalCode>
<phone>101</phone>
<phoneExtension>91</phoneExtension>
</corporateEntity>
<PersonalDetails>
<Name>Marine1 International</Name>
<city>Fort Lauradel</city>
<state>FL</state>
<country>USA</country>
<postalCode>32111</postalCode>
<phone>101</phone>
</PersonalDetails>
</CreateCustomerRequest>
Current Output:
,CREATE ,TEST ,0001-01-01-00.00.00.000000,TEST ,0001-01-01-00.00.00.000000
,Marine International ,One Marine drive ,One Marine drive ,Fort Lauradel ,FL ,USA,32111 ,101 ,91
,Marine1 International ,Fort Lauradel ,FL ,USA,32111 ,101
Expected Output:
CREATE TEST 0001-01-01-00.00.00.000000TEST 0001-01-01-00.00.00.000000
Marine International One Marine drive One Marine drive Fort Lauradel FL USA32111 101 91
Marine1 International Fort Lauradel FL USA32111 101
How can I remove these commas?
Thanks in advance !!! |
|
| Back to top |
|
 |
| Vitor |
Posted: Mon Oct 15, 2018 9:56 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
How did you create the DFDL? It's importing the RecordSeparatedFieldFormat, which IIRC comes out of the CSV wizard and defaults to a comma as a separator. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
| Back to top |
|
 |
| akashdwolf |
Posted: Mon Oct 15, 2018 10:03 am Post subject: |
|
|
Apprentice
Joined: 09 Feb 2017 Posts: 28 Location: Mumbai
|
|
| Back to top |
|
 |
| akashdwolf |
Posted: Mon Oct 15, 2018 10:06 am Post subject: |
|
|
Apprentice
Joined: 09 Feb 2017 Posts: 28 Location: Mumbai
|
| Actally I refered smuktineni's post from that link but I did not use COBOL. |
|
| Back to top |
|
 |
| Vitor |
Posted: Mon Oct 15, 2018 10:25 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
| akashdwolf wrote: |
| Actally I refered smuktineni's post from that link but I did not use COBOL. |
OK, but that doesn't really say anything about what you did, just that you read the post first.
So:
- did you use one of the wizards; if so which one?
- if you used record oriented text (and if you didn't, I've found your problem) what setting did you select?
Let's start there. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
| Back to top |
|
 |
| timber |
Posted: Mon Oct 15, 2018 10:41 am Post subject: |
|
|
 Grand Master
Joined: 25 Aug 2015 Posts: 1292
|
As Vitor pointed out, this line:
| Code: |
| <xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="../IBMdefined/RecordSeparatedFieldFormat.xsd" /> |
...is importing a set of DFDL properties designed for delimited formats. Your format is not delimited - it's a fixed-length format.
If I was modelling this I would probably not bother to import any default format. DFDL will tell you (via errors) when you haven't set a mandatory property. Fix the errors until DFDL stops reporting them, and you'll be good to go. |
|
| Back to top |
|
 |
| akashdwolf |
Posted: Mon Oct 15, 2018 10:49 am Post subject: |
|
|
Apprentice
Joined: 09 Feb 2017 Posts: 28 Location: Mumbai
|
Thanks Vitor for replying,
I followed the below steps:
New Message Model-->Record-oriented Text-->Create an emptyDFDL schema file,I will model my data using DFDL schema editor
Below DFDL was created along with default IBM XSD RecordSeparatedFieldFormat.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ibmDfdlExtn="http://www.ibm.com/dfdl/extensions" xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions" xmlns:recSepFieldsFmt="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat">
<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 encoding="{$dfdl:encoding}" escapeSchemeRef="" occursCountKind="implicit" ref="recSepFieldsFmt:RecordSeparatedFieldsFormat" />
</xsd:appinfo>
</xsd:annotation>
</xsd:schema>
After this I manually pasted the schema.
Last edited by akashdwolf on Mon Oct 15, 2018 11:24 am; edited 1 time in total |
|
| Back to top |
|
 |
| Vitor |
Posted: Mon Oct 15, 2018 10:50 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
| timber wrote: |
As Vitor pointed out, this line:
| Code: |
| <xsd:import namespace="http://www.ibm.com/dfdl/RecordSeparatedFieldFormat" schemaLocation="../IBMdefined/RecordSeparatedFieldFormat.xsd" /> |
...is importing a set of DFDL properties designed for delimited formats. Your format is not delimited - it's a fixed-length format. |
I was hoping for a "Doh!" moment when the OP realizes there's a radio button he missed (well that's how I duplicated his problem.......)
| timber wrote: |
| If I was modelling this I would probably not bother to import any default format. DFDL will tell you (via errors) when you haven't set a mandatory property. Fix the errors until DFDL stops reporting them, and you'll be good to go. |
It's a nice simple format and I doubt using a wizard would be that much faster. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
| Back to top |
|
 |
| Vitor |
Posted: Mon Oct 15, 2018 10:52 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
| akashdwolf wrote: |
Below DFDL was created along with default IBM XSD RecordSeparatedFieldFormat.xsd: |
A record separated field format will not work for your fixed length data. If your data is not fixed length but is space delimited, then you need to set that up.
| akashdwolf wrote: |
| After this I manually pasted the schema. |
Having cut it from where? _________________ Honesty is the best policy.
Insanity is the best defence. |
|
| Back to top |
|
 |
| Vitor |
Posted: Mon Oct 15, 2018 10:55 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
If it was me, and it isn't, I'd go with @timber's suggestion.
Start again with a blank schema.
Don't import any of the IBM schemas unless you're sure you need them (tip: you don't).
Model the types and the messages.
Bask in the triumph.
This will be much faster than trying to fix what you have. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
| Back to top |
|
 |
| akashdwolf |
Posted: Mon Oct 15, 2018 12:43 pm Post subject: |
|
|
Apprentice
Joined: 09 Feb 2017 Posts: 28 Location: Mumbai
|
Thanks timber and Vitor.
I made the suggested changes and its working now.  |
|
| Back to top |
|
 |
|
|