XSD aufräumen - Custom + CustomType entfernen

    • Hallo,

      Mir ist gerade folgendes aufgefallen: Mein C# Klasse sieht so aus:

      details.ItemList = new ItemListType[] { itemList };

      Dh. Die ItemList im DetailsType ist ein Array sprich man kann hier mehrmals bis zu 999 Zeilen hineingeben, da der ItemListType die mMn eigentliche Liste der Postionionen enthält und zwar (ItemListType ListLineItemType[]).

      <xs:complexType name="DetailsType">
      <xs:sequence>
      <xs:element ref="HeaderDescription" minOccurs="0"/>
      <!-- [CHANGE] changed unbounded to 999; only up to 999 ListLineItem's are supported! -->
      <xs:element ref="ItemList" maxOccurs="999"/>
      <xs:element ref="FooterDescription" minOccurs="0"/>
      </xs:sequence>
      </xs:complexType>

      ändern auf

      <xs:complexType name="DetailsType">

      <xs:element ref="HeaderDescription" minOccurs="0"/>

      <xs:element ref="ItemList" maxOccurs="999"/>
      <xs:element ref="FooterDescription" minOccurs="0"/>

      </xs:complexType>

      sG
    • Nein, das geht leider nicht. sequence gibt nur an, dass die darin enthaltenen Elemente in der angegebenen Reihenfolge erscheinen müssen - einen anderen Unterschied habe ich im Posting nicht gesehen.

      Das Problem im XSD ist einfach, dass es in ebInterface 2 Hierarchieebenen gibt und die Summe aller Positionen, über alle Hierarchieebenen 999 nicht überschreiten darf, das aber in XSD nicht abbildbar ist.

      vg P. Helger
    • 2.) Macht er mir bei der VAT

      public partial class VATType
      {

      private object[] itemsField;

      /// <remarks/>
      [System.Xml.Serialization.XmlElementAttribute("Item", typeof (ItemType))]
      [System.Xml.Serialization.XmlElementAttribute("TaxExemption", typeof (string))]
      public object[] Items
      {
      get { return this.itemsField; }
      set { this.itemsField = value; }
      }
      }

      Sprich eine Array of objects nicht lineitem

      Vorschlag:
      <xs:complexType name="VATType">
      <xs:choice>
      <xs:element ref="TaxExemption"/>
      <xs:sequence>
      <xs:element ref="Item" maxOccurs="unbounded"/>
      </xs:sequence>
      </xs:choice>
      </xs:complexType>

      ändern auf

      <xs:complexType name="VATType">
      <xs:choice>
      <xs:element ref="TaxExemption"/>
      <xs:sequence>
      <xs:element ref="ItemType" maxOccurs="unbounded"/>
      </xs:sequence>
      </xs:choice>
      </xs:complexType>

      sG
    • phelger schrieb:

      Nein, das geht leider nicht. sequence gibt nur an, dass die darin enthaltenen Elemente in der angegebenen Reihenfolge erscheinen müssen - einen anderen Unterschied habe ich im Posting nicht gesehen.

      Das Problem im XSD ist einfach, dass es in ebInterface 2 Hierarchieebenen gibt und die Summe aller Positionen, über alle Hierarchieebenen 999 nicht überschreiten darf, das aber in XSD nicht abbildbar ist.

      vg P. Helger
      Ich verstehe nicht den tieferen Sinn davon die Sequence von ListLineItemType in der Sequnce von DetailsType quasi 2x drinnen zu haben.
      Was wäre hier der betriebswirtschaftliche, rechtliche,... Sinn dahinter?


      <xs:complexType name="DetailsType">

      <xs:sequence>

      <xs:element ref="HeaderDescription" minOccurs="0"/>

      <!-- [CHANGE] changed unbounded to 999; only up to 999 ListLineItem's are supported! -->

      <xs:element ref="ItemList" maxOccurs="999"/>

      <xs:element ref="FooterDescription" minOccurs="0"/>

      </xs:sequence>

      </xs:complexType>
      <xs:complexType name="ListLineItemType">
      <xs:sequence>
      <xs:element ref="PositionNumber" minOccurs="0"/>
      <xs:element ref="Description" maxOccurs="unbounded"/>
      <xs:element ref="ArticleNumber" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="Quantity"/>
      <xs:element ref="UnitPrice"/>
      <xs:element ref="TaxRate"/>
      <xs:element ref="DiscountFlag" minOccurs="0"/>
      <xs:element ref="ReductionAndSurchargeListLineItemDetails" minOccurs="0"/>
      <xs:element ref="Delivery" minOccurs="0"/>
      <xs:element ref="BillersOrderReference" minOccurs="0"/>
      <xs:element ref="InvoiceRecipientsOrderReference" minOccurs="0"/>
      <xs:element ref="AdditionalInformation" minOccurs="0"/>
      <xs:element ref="LineItemAmount"/>
      <xs:element ref="ext:ListLineItemExtension" minOccurs="0"/>
      </xs:sequence>
      </xs:complexType>


      sG

      PS: Kann man das XML formatieren?
    • phelger schrieb:

      Ihr XMLSerialization Framework ist nicht ganz optimal - mein JAXB 2.2.7 macht ein schönes Objekt mit 2 Feldern drauß :)

      @XmlElement(name = "TaxExemption")
      private String taxExemption;
      @XmlElement(name = "Item")
      @Size(min = 1)
      private List item;

      vg P. Helger
      Hmm, eigentlich sollten 3 Felder drinnen sein und zwar TaxedAmount, TaxRate, Amount

      oder ?

      public decimal TaxedAmount
      {
      get { return this.taxedAmountField; }
      set { this.taxedAmountField = value; }
      }

      /// <remarks/>
      public TaxRateType TaxRate
      {
      get { return this.taxRateField; }
      set { this.taxRateField = value; }
      }

      /// <remarks/>
      public decimal Amount