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 |
|
 |
|