XML: Difference between revisions

From Commander4j
Created page with "This page is not intended to be a tutorial on XML and XSL, there are many resources online which can do that. This document is designed to illustrate how the middleware application can be used to transform an input XML document into a modified output document. The XML connector is perhaps one of the simpler ones to explain. The core middleware application is designed to process data once it has been converted into an xml document internally. For example the CSV and ASCI..."
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category: Middleware4j]]
This page is not intended to be a tutorial on XML and XSL, there are many resources online which can do that. This document is designed to illustrate how the middleware application can be used to transform an input XML document into a modified output document.
This page is not intended to be a tutorial on XML and XSL, there are many resources online which can do that. This document is designed to illustrate how the middleware application can be used to transform an input XML document into a modified output document.


Line 7: Line 8:
=XML Map Configuration=
=XML Map Configuration=
'''config.xml'''
'''config.xml'''
<map id="map107" enabled="Y" description="C4J Production Declaration to B2MML S95 XML Production Declaration">
<syntaxhighlight lang="xml">
<map id="map107" enabled="Y" description="C4J Production Declaration to B2MML S95 XML Production Declaration">
   <input id="in1" description="Read C4J Prod Dec XML">
   <input id="in1" description="Read C4J Prod Dec XML">
       <type>XML</type>
       <type>XML</type>
Line 15: Line 17:
       <XSLT>C4J_PRODDEC_XML_to_S95_PRODDEC_XML.xsl</XSLT>
       <XSLT>C4J_PRODDEC_XML_to_S95_PRODDEC_XML.xsl</XSLT>
   </input>
   </input>
   <output id="out1" enabled="Y" description="Write B2MML S95 XML Prod Dec">
   <output id="out1" enabled="Y" description="Write B2MML S95 XML Prod Dec">
       <path>./interface/output/107 (NES B2MML S95 XML Production Declaration)</path>
       <path>./interface/output/107 (NES B2MML S95 XML Production Declaration)</path>
Line 22: Line 23:
   </output>
   </output>
  </map>
  </map>
</syntaxhighlight>


=Example Input Document=
=Example Input Document=
<syntaxhighlight lang="xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <?xml version="1.0" encoding="UTF-8"?>
  <message>
  <message>
Line 64: Line 67:
     </messageData>
     </messageData>
  </message>
  </message>
</syntaxhighlight>


=Example Output Document=
=Example Output Document=
<syntaxhighlight lang="xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <?xml version="1.0" encoding="UTF-8"?>
  <ProductionPerformance xmlns:c4j="http://www.commander4j.com">
  <ProductionPerformance xmlns:c4j="http://www.commander4j.com">
Line 84: Line 89:
   <UnitOfMeasure>EA</UnitOfMeasure>
   <UnitOfMeasure>EA</UnitOfMeasure>
  </ProductionPerformance>
  </ProductionPerformance>
</syntaxhighlight>


=XSLT=
=XSLT=
'''C4J_PRODDEC_XML_to_S95_PRODDEC_XML.xsl'''
'''C4J_PRODDEC_XML_to_S95_PRODDEC_XML.xsl'''
<syntaxhighlight lang="xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:c4j="http://www.commander4j.com" exclude-result-prefixes="xs" version="2.0">
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:c4j="http://www.commander4j.com" exclude-result-prefixes="xs" version="2.0">
   <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
   <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
   <xsl:strip-space elements="*"/>
   <xsl:strip-space elements="*"/>
   <!-- Local Variables -->
   <!-- Local Variables -->
   <xsl:variable name="DATENOW" select="current-dateTime()"/>
   <xsl:variable name="DATENOW" select="current-dateTime()"/>
   <xsl:variable name="MESSAGEDATE" select="format-dateTime($DATENOW, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')"/>
   <xsl:variable name="MESSAGEDATE" select="format-dateTime($DATENOW, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')"/>
   <xsl:template match="message">
   <xsl:template match="message">
   <ProductionPerformance>
   <ProductionPerformance>
     <ID><xsl:value-of select="/message/messageRef"/></ID>
     <ID><xsl:value-of select="/message/messageRef"/></ID>
     <Plant><xsl:value-of select="/message/messageData/productionDeclaration/plant"/></Plant>
     <Plant><xsl:value-of select="/message/messageData/productionDeclaration/plant"/></Plant>
     <PublishedDate><xsl:value-of select="$MESSAGEDATE"/></PublishedDate>
     <PublishedDate><xsl:value-of select="$MESSAGEDATE"/></PublishedDate>
     <ProductionRequestID><xsl:value-of select="/message/messageData/productionDeclaration/processOrder"/></ProductionRequestID>
     <ProductionRequestID><xsl:value-of select="/message/messageData/productionDeclaration/processOrder"/> </ProductionRequestID>
     <Recipe><xsl:value-of select="/message/messageData/productionDeclaration/recipe"/></Recipe>
     <Recipe><xsl:value-of select="/message/messageData/productionDeclaration/recipe"/></Recipe>
     <MaterialDefinitionID><xsl:value-of select="/message/messageData/productionDeclaration/material"/></MaterialDefinitionID>
     <MaterialDefinitionID><xsl:value-of select="/message/messageData/productionDeclaration/material"/>   </MaterialDefinitionID>
     <MaterialLotID><xsl:value-of select="/message/messageData/productionDeclaration/batch"/></MaterialLotID>
     <MaterialLotID><xsl:value-of select="/message/messageData/productionDeclaration/batch"/></MaterialLotID>
     <MaterialSubLotID>00<xsl:value-of select="/message/messageData/productionDeclaration/SSCC"/></MaterialSubLotID>
     <MaterialSubLotID>00<xsl:value-of select="/message/messageData/productionDeclaration/SSCC"/></MaterialSubLotID>
Line 119: Line 121:
   </xsl:template>
   </xsl:template>
  </xsl:stylesheet>
  </xsl:stylesheet>
</syntaxhighlight>

Latest revision as of 11:43, 25 August 2024

This page is not intended to be a tutorial on XML and XSL, there are many resources online which can do that. This document is designed to illustrate how the middleware application can be used to transform an input XML document into a modified output document.

The XML connector is perhaps one of the simpler ones to explain. The core middleware application is designed to process data once it has been converted into an xml document internally. For example the CSV and ASCII connectors will load the appropriate file type and convert into XML internally so that you can manipulate the data using XSLT. The XML connector does not need to convert the raw data into XML as it's already in that format when its loaded.

In the configuration shown below you will see that an XSTL transformation is applied in the input stage, however in this example the XSLT could have been applied on the output stage without any effect on the result.

XML Map Configuration

config.xml

<map id="map107" enabled="Y" description="C4J Production Declaration to B2MML S95 XML Production Declaration">
  <input id="in1" description="Read C4J Prod Dec XML">
      <type>XML</type>
      <path>./interface/input/107 (NES C4J Production Declaration)</path>
      <mask/>
      <pollingInterval>1000</pollingInterval>
      <XSLT>C4J_PRODDEC_XML_to_S95_PRODDEC_XML.xsl</XSLT>
  </input>
  <output id="out1" enabled="Y" description="Write B2MML S95 XML Prod Dec">
      <path>./interface/output/107 (NES B2MML S95 XML Production Declaration)</path>
      <type>XML</type>
      <XSLT/>
  </output>
 </map>

Example Input Document

 <?xml version="1.0" encoding="UTF-8"?>
 <message>
    <hostRef>service</hostRef>
    <messageRef>12584314</messageRef>
    <interfaceType>Production Declaration</interfaceType>
    <messageInformation>SSCC=000000000000000123</messageInformation>
    <interfaceDirection>Output</interfaceDirection>
    <messageDate>2016-08-01T14:58:16</messageDate>
    <messageData>
        <productionDeclaration>
            <SSCC>000000000000000123</SSCC>
            <processOrder>20725187</processOrder>
            <recipe>100000000028949253</recipe>
            <requiredResource>P2VK1112</requiredResource>
            <material>43170672</material>
            <description>Self Sealing Stem Bolt</description>
            <old_code/>
            <ean>07613032213848</ean>
            <variant>00</variant>
            <status>Unrestricted</status>
            <batch>6214093310</batch>
            <batchStatus>Restricted</batchStatus>
            <expiry_Mode>BATCH</expiry_Mode>
            <expiryDate>2018-08-31T00:00:00</expiryDate>
            <location>WISBECH</location>
            <name>Wisbech</name>
            <gln>0000000000123</gln>
            <plant>1234</plant>
            <warehouse>789</warehouse>
            <storageLocation>0001</storageLocation>
            <storageSection/>
            <storageBin>DESPATCH</storageBin>
            <storageType>PRO</storageType>
            <productionQuantity>5616.000</productionQuantity>
            <productionUOM>EA</productionUOM>
            <confirmed>Y</confirmed>
            <productionDate>2016-08-01T14:58:03</productionDate>
        </productionDeclaration>
    </messageData>
 </message>

Example Output Document

 <?xml version="1.0" encoding="UTF-8"?>
 <ProductionPerformance xmlns:c4j="http://www.commander4j.com">
   <ID>12584314</ID>
   <Plant>1234</Plant>
   <PublishedDate>2024-04-12T09:39:27</PublishedDate>
   <ProductionRequestID>20725187</ProductionRequestID>
   <Recipe>100000000028949253</Recipe>
   <MaterialDefinitionID>000000000043170672</MaterialDefinitionID>
   <MaterialLotID>6214093310</MaterialLotID>
   <MaterialSubLotID>00000000000000000123</MaterialSubLotID>
   <Plant>1234</Plant>
   <Warehouse>789</Warehouse>
   <Type>PRO</Type>
   <Section/>
   <Bin>DESPATCH</Bin>
   <Quantity>5616.000</Quantity>
   <UnitOfMeasure>EA</UnitOfMeasure>
 </ProductionPerformance>

XSLT

C4J_PRODDEC_XML_to_S95_PRODDEC_XML.xsl

 <?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:c4j="http://www.commander4j.com" exclude-result-prefixes="xs" version="2.0">
  <xsl:output encoding="UTF-8" indent="yes" method="xml"/>
  <xsl:strip-space elements="*"/>
  <!-- Local Variables -->
  <xsl:variable name="DATENOW" select="current-dateTime()"/>
  <xsl:variable name="MESSAGEDATE" select="format-dateTime($DATENOW, '[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')"/>
  <xsl:template match="message">
  <ProductionPerformance>
    <ID><xsl:value-of select="/message/messageRef"/></ID>
    <Plant><xsl:value-of select="/message/messageData/productionDeclaration/plant"/></Plant>
    <PublishedDate><xsl:value-of select="$MESSAGEDATE"/></PublishedDate>
    <ProductionRequestID><xsl:value-of select="/message/messageData/productionDeclaration/processOrder"/>  </ProductionRequestID>
    <Recipe><xsl:value-of select="/message/messageData/productionDeclaration/recipe"/></Recipe>
    <MaterialDefinitionID><xsl:value-of select="/message/messageData/productionDeclaration/material"/>   </MaterialDefinitionID>
    <MaterialLotID><xsl:value-of select="/message/messageData/productionDeclaration/batch"/></MaterialLotID>
    <MaterialSubLotID>00<xsl:value-of select="/message/messageData/productionDeclaration/SSCC"/></MaterialSubLotID>
    <Plant><xsl:value-of select="/message/messageData/productionDeclaration/plant"/></Plant>
    <Warehouse><xsl:value-of select="/message/messageData/productionDeclaration/warehouse"/></Warehouse>
    <Type><xsl:value-of select="/message/messageData/productionDeclaration/storageType"/></Type>
    <Section><xsl:value-of select="/message/messageData/productionDeclaration/storageSection"/></Section>
    <Bin><xsl:value-of select="/message/messageData/productionDeclaration/storageBin"/></Bin>
    <Quantity><xsl:value-of select="/message/messageData/productionDeclaration/productionQuantity"/></Quantity>
    <UnitOfMeasure><xsl:value-of select="/message/messageData/productionDeclaration/productionUOM"/></UnitOfMeasure>
  </ProductionPerformance>
  </xsl:template>
 </xsl:stylesheet>