indice-co / EDI.Net

EDI Serializer/Deserializer. Supports EDIFact, X12 and TRADACOMS formats
MIT License
434 stars 164 forks source link

Not able to serialize and deserialize SMPRES message correctly. #219

Open dvddo opened 2 years ago

dvddo commented 2 years ago

I have uploaded to my git the project i'm using for testing serialization and deserilization of message. https://github.com/dvddo/EDI.Net. Issue is i can serialize it but deserialize does not return the same edi content. I have included SMPRES.xsd in the project to better understand issue.

David

dvddo commented 2 years ago

UNA:+.? ' UNB+IATB:1+AA0SM+1APPC+160608:1406+AA507987110001+02AXZAOYE60001++T' UNH+1+SMPRES:96:2:IA+09B0661E' TVL+291016+DAL+LAX+AA+0001:Y' EQI++++++378' CBD+Y+7:29+M++N++A:W+B+C:A+D:A+E+F:W' ROD+7++A:O:W:K+B:F:K+C:F:A:K+D:R:1:A:K+E:F:K+F:F:W:K' ROD+8++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+9++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+10++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+11++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+12++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+13++A:Q:8:W+B:Q:8+C:Q:8:A+D:Q:8:A+E:Q:8+F:Q:8:W' ROD+14++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+15++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+16++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+17++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+18++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+19++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+20++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+21++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+22++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+23++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+24++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+25++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+26++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+27++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+28++A:F:W+B:F+C:F:A+D:F:A+E:F+F:F:W' ROD+29++A:F:W+B:F+C:R:1:A+D:F:A+E:F+F:F:W' UNT+28+1' UNZ+1+UB507987110001'

cleftheris commented 2 years ago

Hi @dvddo and thanks for your interest in EDI.Net. Can you elaborate on what is the the input data, your classes/models and output?

As a side note I would suggest when when you are working on an opensource project to prefer forking instead of re-uploading the project to github. There are numerous reasons you can google some or them but mainly it looks better in the eyes of the maintainer.

dvddo commented 2 years ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using indice.Edi.Serialization;

namespace indice.Edi.Tests.Models
{
    public class Edifact_SeatMap
    {
        public Message Msg { get; set; }

        [EdiMessage]
        public class Message
        {
            public CBD CabinDetails { get; set; }
            public List<ROD> RowDetails { get; set; }
        }

        /// <summary>
        /// Row Details
        /// </summary>
        [EdiSegment, EdiPath("ROD")]
        public class ROD
        {
            [EdiValue(Path = "*/0")]
            public string SeatRowNumber { get; set; }

            [EdiPath("*/1")]
            public ROD_RowCharacteristicsDetails RowCharacteristicsDetails { get; set; }

            //public List<ROD_SeatOccupationDetails> SeatOccupationDetails { get; set; }
        }

        /// <summary>
        /// C049
        /// </summary>
        [EdiElement]
        public class ROD_RowCharacteristicsDetails
        {
            [EdiValue(Path = "*/1/0")]
            public string RowCharacteristic { get; set; }
            [EdiValue(Path = "*/1/1")]
            public string RowCharacteristic1 { get; set; }
            [EdiValue(Path = "*/1/2")]
            public string RowCharacteristic2 { get; set; }

            [EdiValue(Path = "*/1/3")]
            public string RowCharacteristic3 { get; set; }
            [EdiValue(Path = "*/1/4")]
            public string RowCharacteristic4 { get; set; }
            [EdiValue(Path = "*/1/5")]
            public string RowCharacteristic5 { get; set; }
            [EdiValue(Path = "*/1/6")]
            public string RowCharacteristic6 { get; set; }
            [EdiValue(Path = "*/1/7")]
            public string RowCharacteristic7 { get; set; }
            [EdiValue(Path = "*/1/8")]
            public string RowCharacteristic8 { get; set; }

        }

        /// <summary>
        /// C051
        /// </summary>
        [EdiElement]
        public class ROD_SeatOccupationDetails
        {
            [EdiValue(Path = "*/*/0")]
            public string SeatColumn { get; set; }
            [EdiValue(Path = "*/*/1")]
            public string SeatOccupation { get; set; }
            [EdiValue(Path = "*/*/2")]
            public string SeatCharacteristicCoded { get; set; }

            [EdiValue(Path = "*/*/3")]
            public string SeatCharacteristicCoded1 { get; set; }
            [EdiValue(Path = "*/*/4")]
            public string SeatCharacteristicCoded2 { get; set; }
            [EdiValue(Path = "*/*/5")]
            public string SeatCharacteristicCoded3 { get; set; }
            [EdiValue(Path = "*/*/6")]
            public string SeatCharacteristicCoded4 { get; set; }
            [EdiValue(Path = "*/*/7")]
            public string SeatCharacteristicCoded5 { get; set; }
            [EdiValue(Path = "*/*/8")]
            public string SeatCharacteristicCoded6 { get; set; }

            //there are 30 more record

        }

        //CabinDetails
        /// <summary>
        /// Cabin Details
        /// </summary>
        [EdiSegment, EdiPath("CBD")]
        public class CBD
        {

            [EdiPath("*/0")]
            public CBD_CabinClassDesignation CabinClassDesignation { get; set; }

            [EdiPath("*/1")]
            public CBD_CabinClassSeatRowRangeDetails CabinClassSeatRowRangeDetails { get; set; }

            [EdiValue(Path = "*/2")]
            public string CabinClassLocation { get; set; }

            [EdiPath("*/3")]
            public CBD_SmokingAreaSeatRowRangeDetails SmokingAreaSeatRowRangeDetails { get; set; }

            [EdiValue(Path = "*/4")]
            public string SeatOccupationDefaultIndicator { get; set; }

            [EdiPath("*/5")]
            public CBD_OverwingSeatRowRange OverwingSeatRowRange { get; set; }

            //public List<CBD_CabinWidthAndColumnDetails> CabinWidthAndColumnDetails { get; set; }

        }

        /// <summary>
        /// C342
        /// </summary>
        [EdiElement]
        public class CBD_CabinClassDesignation
        {
            [EdiValue(Path = "*/0/0")]
            public string CabinClassDesignator { get; set; }
            [EdiValue(Path = "*/0/1")]
            public string CharacteristicIdentification { get; set; }
            [EdiValue(Path = "*/0/2")]
            public string CabinClassOfServiceCoded { get; set; }

            [EdiValue(Path = "*/0/3")]
            public string CabinCompartmentDesignator { get; set; }

        }

        /// <summary>
        /// C052
        /// </summary>
        [EdiElement]
        public class CBD_CabinClassSeatRowRangeDetails
        {
            [EdiValue(Path = "*/1/0")]
            public string CabinClassDesignator { get; set; }
            [EdiValue(Path = "*/1/1")]
            public string CharacteristicIdentification { get; set; }

        }

        /// <summary>
        /// C053
        /// </summary>
        [EdiElement]
        public class CBD_SmokingAreaSeatRowRangeDetails
        {
            [EdiValue(Path = "*/3/0")]
            public string SeatRowNumber { get; set; }
            [EdiValue(Path = "*/3/1")]
            public string SeatRowNumber1 { get; set; }

        }

        /// <summary>
        /// C058
        /// </summary>
        [EdiElement]
        public class CBD_OverwingSeatRowRange
        {
            [EdiValue(Path = "*/5/0")]
            public string SeatRowNumber { get; set; }
            [EdiValue(Path = "*/5/1")]
            public string SeatRowNumber1 { get; set; }

        }

        /// <summary>
        /// C054
        /// </summary>
        [EdiElement]
        public class CBD_CabinWidthAndColumnDetails
        {
            [EdiValue(Path = "*/*/0")]
            public string SeatColumn { get; set; }
            [EdiValue(Path = "*/*/1")]
            public string ColumnDescription { get; set; }
            [EdiValue(Path = "*/*/2")]
            public string ColumnDescription1 { get; set; }

        }
    }
}
dvddo commented 2 years ago

Thanks for the advice. My test file is SeatMapTest.cs.

dvddo commented 2 years ago
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using indice.Edi.Tests.Models;
using Xunit;

namespace indice.Edi.Tests
{
    public class SeatMapTest
    {
        [Fact, Trait(Traits.Tag, "EDIFact"), Trait(Traits.Issue, "#999")]
        public void EmptySegment_Withought_A_segmentname_separator_should_parse() {
            var grammar = EdiGrammar.NewEdiFact();
            var interchange = default(Edifact_SeatMap);
            using (var stream = Helpers.GetResourceStream("edifact.Issue.SeatMap.edi")) {
                interchange = new EdiSerializer().Deserialize<Edifact_SeatMap>(new StreamReader(stream), grammar);
            }
            Assert.NotNull(interchange);
        }
    }
}
dvddo commented 2 years ago

in a different project using model above i get incorrect deserialize edi

UNA:+.? ' UNB+IATB:1+AA0SM+1APPC+160608:1406+AA507987110001+++T' UNH+1+SMPRES:96:2:IA+09B0661E' TVL+291016+DAL+LAX+AA+0001:Y' EQI+' CBD+Y+7:29+M++N' ROD+7' ROD+8' ROD+9' ROD+10' ROD+11' ROD+12' ROD+13' ROD+14' ROD+15' ROD+16' ROD+17' ROD+18' ROD+19' ROD+20' ROD+21' ROD+22' ROD+23' ROD+24' ROD+25' ROD+26' ROD+27' ROD+28' ROD+29' UNT+28+1' UNZ+1+UB507987110001'

dvddo commented 2 years ago

in my other project my model look like this

        public UNB Header { get; set; }
        public SMPRES SeatMap { get; set; }
        public UNZ Footer { get; set; }

        [EdiMessage]
        public class SMPRES
        {
            public UNH MessageHeader { get; set; }
            public MSG MessageType { get; set; }
            public List<TVL_SG> Legs { get; set; }
            public UNT MessageFooter { get; set; }
        }

        [EdiSegmentGroup("TVL", "EQI", "CBD", "ROD_SG")]
        public class TVL_SG : TVL
        {
            public EQI EquipmentInformation { get; set; }
            public CBD CabinDetails { get; set; }
            public List<ROD_SG> RowDetails { get; set; }
        }

        [EdiSegmentGroup("ROD")]
        public class ROD_SG : ROD
        {

        }
dvddo commented 2 years ago
    /// <summary>
    /// MESSAGE TYPE IDENTIFICATION
    /// </summary>
    [EdiSegment, EdiPath("MSG")]
    public class MSG
    {
        [EdiValue(Path = "*/0/0")]
        public string BusinessFunctionCoded { get; set; }
        [EdiValue(Path = "*/0/1")]
        public string MessageFunctionCoded { get; set; }
        [EdiValue(Path = "*/0/2")]
        public string CodeListQualifier { get; set; }
        [EdiValue(Path = "*/0/3")]
        public string CodeListResponsibleAgencyCoded { get; set; }

        [EdiValue(Path = "*/1/0")]
        public string ResponseTypeCoded { get; set; }

    }

    /// <summary>
    /// MESSAGE TYPE IDENTIFICATION
    /// </summary>
    [EdiSegment, EdiPath("UNB")]
    public class UNB
    {
        #region Interchange Header

        [EdiValue(Path = "*/0/0")]
        public string SyntaxIdentifier { get; set; }

        [EdiValue(Path = "*/0/1")]
        public string SyntaxVersionNumber { get; set; }

        [EdiValue(Path = "*/1/0")]
        public string SenderIdentification { get; set; }

        [EdiValue(Path = "*/1/1")]
        public string SenderPartnerIdentificationCodeQualifier { get; set; }
        [EdiValue(Path = "*/1/2")]
        public string AddressForReverseRouting { get; set; }

        [EdiValue(Path = "*/2/0")]
        public string RecipientIdentification { get; set; }

        [EdiValue(Path = "*/2/1")]
        public string RecipientPartnerIdentificationCodeQualifier { get; set; }
        [EdiValue(Path = "*/2/2")]
        public string RoutingAddress { get; set; }

        [EdiValue(Path = "*/3/0")]
        public string DateOfPreparation { get; set; }

        [EdiValue(Path = "*/3/1")]
        public string TimeOfPreparation { get; set; }

        [EdiValue(Path = "*/4")]
        public string InterchangeControlReference { get; set; }

        [EdiValue(Path = "*/7")]
        public string ProcessingPriorityCode { get; set; }
        #endregion Interchange Header

    }

    /// <summary>
    /// MESSAGE TYPE IDENTIFICATION
    /// </summary>
    [EdiSegment, EdiPath("UNH")]
    public class UNH
    {
        #region Message Header Info

        [EdiValue(Path = "*/0")]
        public string MessageReferenceNumber { get; set; }

        [EdiValue(Path = "*/1/0")]
        public string MessageType { get; set; }

        [EdiValue(Path = "*/1/1")]
        public string MessageTypeVersionNumber { get; set; }

        [EdiValue(Path = "*/1/2")]
        public string MessageTypeReleaseNumber { get; set; }

        [EdiValue(Path = "*/1/3")]
        public string ControllingAgency { get; set; }

        [EdiValue(Path = "*/2/0")]
        public string CommonAccessReference { get; set; }
        #endregion Message Header Info

    }

    /// <summary>
    /// departure date/time, origin, destination, operating airline code, flight
    /// number, and operation suffix.
    /// </summary>
    [EdiSegment, EdiPath("TVL")]
    public class TVL
    {

        [EdiValue("9(6)", Path = "*/0/0", Format = "ddMMyy", Description = "Date")]
        public string FirstDate { get; set; }
        [EdiValue("9(4)", Path = "*/0/1", Format = "HHmm", Description = "Time")]
        public string FirstTime { get; set; }

        private DateTime? _Arrival;
        [EdiValue("9(6)", Path = "*/0/2", Format = "ddMMyy", Description = "Date")]
        public string SecodnDate { get; set; }
        [EdiValue("9(4)", Path = "*/0/3", Format = "HHmm", Description = "Time")]
        public string SecondTime { get; set; }

        [EdiValue("X(3)", Path = "*/1/0")]
        public string OriginAirport { get; set; }
        [EdiValue("X(3)", Path = "*/2/0")]
        public string DestinationAirport { get; set; }
        [EdiValue("X(3)", Path = "*/3/0")]
        public string OperatingAirlineCode { get; set; }

        [EdiValue("X(10)", Path = "*/4/0")]
        public string FlightNumber { get; set; }

        [EdiValue("X(1)", Path = "*/4/1")]
        public string BookingCode { get; set; }

        [EdiValue("X(1)", Path = "*/7/0")]
        public string ProcessingIndicatorCoded { get; set; }

    }

    /// <summary>
    /// C048
    /// </summary>
    [EdiElement]
    public class EQI_ConfigurationDetails
    {
        [EdiValue(Path = "*/0/0")]
        public string CabinClassDesignator { get; set; }
        [EdiValue(Path = "*/0/1")]
        public string Seats_NumberOfSeats { get; set; }
        [EdiValue(Path = "*/0/2")]
        public string CharacteristicIdentification { get; set; }

        [EdiValue(Path = "*/0/3")]
        public string CharacteristicIdentification1 { get; set; }
        [EdiValue(Path = "*/0/4")]
        public string CharacteristicIdentification2 { get; set; }
        [EdiValue(Path = "*/0/5")]
        public string CharacteristicIdentification3 { get; set; }
        [EdiValue(Path = "*/0/6")]
        public string CharacteristicIdentification4 { get; set; }
        // There are 24 more CharacteristicIdentification
    }

    /// <summary>
    /// Row Details
    /// </summary>
    [EdiSegment, EdiPath("ROD")]
    public class ROD
    {
        [EdiValue(Path = "*/0")]
        public string SeatRowNumber { get; set; }

        [EdiPath("*/1")]
        public ROD_RowCharacteristicsDetails RowCharacteristicsDetails { get; set; }

       // public List<ROD_SeatOccupationDetails> SeatOccupationDetails { get; set; }
    }

    /// <summary>
    /// C049
    /// </summary>
    [EdiElement]
    public class ROD_RowCharacteristicsDetails
    {
        [EdiValue(Path = "*/1/0")]
        public string RowCharacteristic { get; set; }
        [EdiValue(Path = "*/1/1")]
        public string RowCharacteristic1 { get; set; }
        [EdiValue(Path = "*/1/2")]
        public string RowCharacteristic2 { get; set; }

        [EdiValue(Path = "*/1/3")]
        public string RowCharacteristic3 { get; set; }
        [EdiValue(Path = "*/1/4")]
        public string RowCharacteristic4 { get; set; }
        [EdiValue(Path = "*/1/5")]
        public string RowCharacteristic5 { get; set; }
        [EdiValue(Path = "*/1/6")]
        public string RowCharacteristic6 { get; set; }
        [EdiValue(Path = "*/1/7")]
        public string RowCharacteristic7 { get; set; }
        [EdiValue(Path = "*/1/8")]
        public string RowCharacteristic8 { get; set; }

    }

    /// <summary>
    /// C051
    /// </summary>
    [EdiElement]
    public class ROD_SeatOccupationDetails
    {
        [EdiValue(Path = "*/*/0")]
        public string SeatColumn { get; set; }
        [EdiValue(Path = "*/*/1")]
        public string SeatOccupation { get; set; }
        [EdiValue(Path = "*/*/2")]
        public string SeatCharacteristicCoded { get; set; }

        [EdiValue(Path = "*/*/3")]
        public string SeatCharacteristicCoded1 { get; set; }
        [EdiValue(Path = "*/*/4")]
        public string SeatCharacteristicCoded2 { get; set; }
        [EdiValue(Path = "*/*/5")]
        public string SeatCharacteristicCoded3 { get; set; }
        [EdiValue(Path = "*/*/6")]
        public string SeatCharacteristicCoded4 { get; set; }
        [EdiValue(Path = "*/*/7")]
        public string SeatCharacteristicCoded5 { get; set; }
        [EdiValue(Path = "*/*/8")]
        public string SeatCharacteristicCoded6 { get; set; }

        //there are 30 more record

    }

    //CabinDetails
    /// <summary>
    /// Cabin Details
    /// </summary>
    [EdiSegment, EdiPath("CBD")]
    public class CBD
    {

        [EdiPath("*/0")]
        public CBD_CabinClassDesignation CabinClassDesignation { get; set; }

        [EdiPath("*/1")]
        public CBD_CabinClassSeatRowRangeDetails CabinClassSeatRowRangeDetails { get; set; }

        [EdiValue(Path = "*/2")]
        public string CabinClassLocation { get; set; }

        [EdiPath("*/3")]
        public CBD_SmokingAreaSeatRowRangeDetails SmokingAreaSeatRowRangeDetails { get; set; }

        [EdiValue(Path = "*/4")]
        public string SeatOccupationDefaultIndicator { get; set; }

        [EdiPath("*/5")]
        public CBD_OverwingSeatRowRange OverwingSeatRowRange { get; set; }

        //public List<CBD_CabinWidthAndColumnDetails> CabinWidthAndColumnDetails { get; set; }

    }

    /// <summary>
    /// C342
    /// </summary>
    [EdiElement]
    public class CBD_CabinClassDesignation
    {
        [EdiValue(Path = "*/0/0")]
        public string CabinClassDesignator { get; set; }
        [EdiValue(Path = "*/0/1")]
        public string CharacteristicIdentification { get; set; }
        [EdiValue(Path = "*/0/2")]
        public string CabinClassOfServiceCoded { get; set; }

        [EdiValue(Path = "*/0/3")]
        public string CabinCompartmentDesignator { get; set; }

    }

    /// <summary>
    /// C052
    /// </summary>
    [EdiElement]
    public class CBD_CabinClassSeatRowRangeDetails
    {
        [EdiValue(Path = "*/1/0")]
        public string CabinClassDesignator { get; set; }
        [EdiValue(Path = "*/1/1")]
        public string CharacteristicIdentification { get; set; }

    }

    /// <summary>
    /// C053
    /// </summary>
    [EdiElement]
    public class CBD_SmokingAreaSeatRowRangeDetails
    {
        [EdiValue(Path = "*/3/0")]
        public string SeatRowNumber { get; set; }
        [EdiValue(Path = "*/3/1")]
        public string SeatRowNumber1 { get; set; }

    }

    /// <summary>
    /// C058
    /// </summary>
    [EdiElement]
    public class CBD_OverwingSeatRowRange
    {
        [EdiValue(Path = "*/5/0")]
        public string SeatRowNumber { get; set; }
        [EdiValue(Path = "*/5/1")]
        public string SeatRowNumber1 { get; set; }

    }

    /// <summary>
    /// C054
    /// </summary>
    [EdiElement]
    public class CBD_CabinWidthAndColumnDetails
    {
        [EdiValue(Path = "*/*/0")]
        public string SeatColumn { get; set; }
        [EdiValue(Path = "*/*/1")]
        public string ColumnDescription { get; set; }
        [EdiValue(Path = "*/*/2")]
        public string ColumnDescription1 { get; set; }

    }

    [EdiSegment, EdiPath("UNT")]
    public class UNT
    {
        // 0074 : NOMBRE DE SEGMENTS DANS LE MESSAGE
        [EdiValue(Path = "*/0/0", Mandatory = true)]
        public int NumberOfSegmentsInAMessage { get; set; }
        // 0062 : NUMÉRO DE RÉFÉRENCE DU MESSAGE
        [EdiValue("X(14)", Path = "*/1/0", Mandatory = true)]
        public string MessageReferenceNumber { get; set; }
    }

    // Fin d'interchange
    [EdiSegment, EdiPath("UNZ")]
    public class UNZ
    {
        // 0036 : COMPTEUR DE CONTROLE DE L’INTERCHANGE
        [EdiValue("X(1)", Path = "*/0/0", Mandatory = true)]
        public int InterchangeControlCount { get; set; }
        // 0020 : REFERENCE DE CONTROLE DE L’INTERCHANGE
        [EdiValue("X(14)", Path = "*/1/0", Mandatory = true)]
        public string InterchangeControlReference { get; set; }
    }
dvddo commented 2 years ago

The schema for SMPRES

<xsd:complexType name="SMPRES">
    <xsd:annotation>
        <xsd:appinfo>96-2 SMPRES</xsd:appinfo>
        <xsd:documentation>Seat Map Response</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="UNH-MessageHeader" type="UNH"/>
        <xsd:element name="RAD-ResponseAnalysisDetails" type="RAD" minOccurs="0"/>
        <xsd:element name="ERD-ErrorInformation" type="ERD" minOccurs="0"/>
        <xsd:element name="WAD-WarningInformation" type="WAD" minOccurs="0"/>
        <xsd:element name="SRP-SeatRequestParameters" type="SRP" minOccurs="0"/>
        <xsd:element name="GROUP_1" type="GROUP_1" minOccurs="0" maxOccurs="5"/>
        <xsd:element name="UNT-MessageTrailer" type="UNT"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="GROUP_1">
    <xsd:sequence>
        <xsd:element name="TVL-TravelProductInformation" type="TVL"/>
        <xsd:element name="ERD-ErrorInformation" type="ERD" minOccurs="0"/>
        <xsd:element name="WAD-WarningInformation" type="WAD" minOccurs="0"/>
        <xsd:element name="APD-AdditionalProductDetails" type="APD" minOccurs="0"/>
        <xsd:element name="EQI-EquipmentInformation" type="EQI" minOccurs="0"/>
        <xsd:element name="GROUP_2" type="GROUP_2" minOccurs="0" maxOccurs="9"/>
        <xsd:element name="GROUP_3" type="GROUP_3" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="GROUP_2">
    <xsd:sequence>
        <xsd:element name="CBD-CabinDetails" type="CBD"/>
        <xsd:element name="EQN-NumberOfUnits" type="EQN" minOccurs="0"/>
        <xsd:element name="CBF-CabinFacilities" type="CBF" minOccurs="0" maxOccurs="9"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="GROUP_3">
    <xsd:sequence>
        <xsd:element name="ROD-RowDetails" type="ROD"/>
        <xsd:element name="CBF-CabinFacilities" type="CBF" minOccurs="0" maxOccurs="9"/>
    </xsd:sequence>
</xsd:complexType>
dvddo commented 2 years ago
<xsd:complexType name="CBD">
    <xsd:sequence>
        <xsd:element name="CBD01-CabinClassDesignation">
            <xsd:complexType><!--C342-->
                <xsd:sequence>
                    <xsd:element name="CBD0101-CabinClassDesignator" type="type9854"/>
                    <xsd:element name="CBD0102-CharacteristicIdentification" type="type7037" minOccurs="0"/>
                    <xsd:element name="CBD0103-CabinClassOfServiceCoded" type="type9873" minOccurs="0"/>
                    <xsd:element name="CBD0104-CabinCompartmentDesignator" type="type9992" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="CBD02-CabinClassSeatRowRangeDetails">
            <xsd:complexType><!--C052-->
                <xsd:sequence>
                    <xsd:element name="CBD0201-SeatRowNumber" type="type9830"/>
                    <xsd:element name="CBD0202-SeatRowNumber" type="type9830"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="CBD03-CabinClassLocation" type="type9863" minOccurs="0"/>
        <xsd:element name="CBD04-SmokingAreaSeatRowRangeDetails" minOccurs="0">
            <xsd:complexType><!--C053-->
                <xsd:sequence>
                    <xsd:element name="CBD0401-SeatRowNumber" type="type9830"/>
                    <xsd:element name="CBD0402-SeatRowNumber" type="type9830"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="CBD05-SeatOccupationDefaultIndicator" type="type9883" minOccurs="0"/>
        <xsd:element name="CBD06-OverwingSeatRowRange" minOccurs="0">
            <xsd:complexType><!--C058-->
                <xsd:sequence>
                    <xsd:element name="CBD0601-SeatRowNumber" type="type9830"/>
                    <xsd:element name="CBD0602-SeatRowNumber" type="type9830"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="CBD07-CabinWidthAndColumnDetails" minOccurs="0" maxOccurs="12">
            <xsd:complexType><!--C054-->
                <xsd:sequence>
                    <xsd:element name="CBD0701-SeatColumn" type="type9831"/>
                    <xsd:element name="CBD0702-ColumnDescription" type="type9882" minOccurs="0"/>
                    <xsd:element name="CBD0703-ColumnDescription" type="type9882" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>
dvddo commented 2 years ago
<xsd:complexType name="ROD">
    <xsd:sequence>
        <xsd:element name="ROD01-SeatRowNumber" type="type9830"/>
        <xsd:element name="ROD02-RowCharacteristicsDetails" minOccurs="0">
            <xsd:complexType><!--C049-->
                <xsd:sequence>
                    <xsd:element name="ROD0201-RowCharacteristic" type="type9864"/>
                    <xsd:element name="ROD0202-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0203-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0204-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0205-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0206-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0207-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0208-RowCharacteristic" type="type9864" minOccurs="0"/>
                    <xsd:element name="ROD0209-RowCharacteristic" type="type9864" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="ROD03-SeatOccupationDetails" minOccurs="0" maxOccurs="12">
            <xsd:complexType><!--C051-->
                <xsd:sequence>
                    <xsd:element name="ROD0301-SeatColumn" type="type9831"/>
                    <xsd:element name="ROD0302-SeatOccupation" type="type9865" minOccurs="0"/>
                    <xsd:element name="ROD0303-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0304-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0305-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0306-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0307-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0308-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0309-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0310-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0311-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0312-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0313-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0314-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0315-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0316-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0317-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0318-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0319-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0320-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0321-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0322-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0323-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0324-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0325-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0326-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0327-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0328-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0329-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0330-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0331-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0332-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0333-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0334-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0335-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0336-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0337-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0338-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0339-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                    <xsd:element name="ROD0340-SeatCharacteristicCoded" type="type9825" minOccurs="0"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>