Altova MapForce 2024 Professional Edition

In diesem Beispiel wird gezeigt, wie Sie mit Programmcode arbeiten, der anhand eines XML-Hauptschemas, durch das andere Schemas importiert wurden, generiert wurde. Jedes der importierten Schemas hat einen anderen Ziel-Namespace. Ziel ist es hier, ein XML-Dokument, in dem alle Elemente ein Präfix entsprechend ihrem Namespace erhalten, programmatisch zu erstellen. Das anhand Ihres C++-, C#- oder Java-Codes erstellte XML-Dokument sollte dabei wie das unten gezeigte aussehen:

 

<?xml version="1.0" encoding="utf-8"?>
<p:Purchase xsi:schemaLocation="http://NamespaceTest.com/Purchase Main.xsd"
          xmlns:p="http://NamespaceTest.com/Purchase"
          xmlns:o="http://NamespaceTest.com/OrderTypes"
          xmlns:c="http://NamespaceTest.com/CustomerTypes"
          xmlns:cmn="http://NamespaceTest.com/CommonTypes"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <p:OrderDetail>
      <o:Item>
          <o:ProductName>Lawnmower</o:ProductName>
          <o:Quantity>1</o:Quantity>
          <o:UnitPrice>148.42</o:UnitPrice>
      </o:Item>
  </p:OrderDetail>
  <p:PaymentMethod>VISA</p:PaymentMethod>
  <p:CustomerDetails>
      <c:Name>Alice Smith</c:Name>
      <c:DeliveryAddress>
          <cmn:Line1>123 Maple Street</cmn:Line1>
          <cmn:Line2>Mill Valley</cmn:Line2>
      </c:DeliveryAddress>
      <c:BillingAddress>
          <cmn:Line1>8 Oak Avenue</cmn:Line1>
          <cmn:Line2>Old Town</cmn:Line2>
      </c:BillingAddress>
  </p:CustomerDetails>
</p:Purchase>

 

Das in diesem Beispiel verwendete Hauptschema hat den Namen Main.xsd. Wie Sie im unten gezeigten Codefragment sehen, werden darin drei weitere Schemas importiert: CommonTypes.xsd, CustomerTypes.xsd und OrderTypes.xsd. Um dieselben Ergebnisse wie in diesem Beispiel zu erhalten, speichern Sie alle unten gezeigten Codefragmente in Dateien und verwenden Sie dieselben Namen wie oben. Beachten Sie, dass jedes der Präfixe ord, pur, cmn und cust im Schema einem Namespace zugeordnet ist (Order types, Purchase types, Common types bzw. Customer types). Im generierten Code stehen die entsprechenden Klassen für Orders, Purchases, Customers usw. dann unter ihrem jeweiligen Namespace zur Verfügung.

 

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://NamespaceTest.com/Purchase"
    xmlns:ord="http://NamespaceTest.com/OrderTypes"
    xmlns:pur="http://NamespaceTest.com/Purchase"
    xmlns:cmn="http://NamespaceTest.com/CommonTypes"
    xmlns:cust="http://NamespaceTest.com/CustomerTypes"
    elementFormDefault="qualified">
  <xs:import schemaLocation="CommonTypes.xsd" namespace="http://NamespaceTest.com/CommonTypes" />
  <xs:import schemaLocation="CustomerTypes.xsd" namespace="http://NamespaceTest.com/CustomerTypes" />
  <xs:import schemaLocation="OrderTypes.xsd" namespace="http://NamespaceTest.com/OrderTypes" />
  <xs:element name="Purchase">
      <xs:complexType>
          <xs:sequence>
              <xs:element name="OrderDetail" type="ord:OrderType" />
              <xs:element name="PaymentMethod" type="cmn:PaymentMethodType" />
              <xs:element ref="pur:CustomerDetails" />
          </xs:sequence>
      </xs:complexType>
  </xs:element>
  <xs:element name="CustomerDetails" type="cust:CustomerType" />
</xs:schema>

Main.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://NamespaceTest.com/CommonTypes"
    elementFormDefault="qualified">
  <xs:complexType name="AddressType">
    <xs:sequence>
        <xs:element name="Line1" type="xs:string"/>
        <xs:element name="Line2" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="PriceType">
    <xs:restriction base="xs:decimal">
        <xs:fractionDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="PaymentMethodType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="VISA"/>
        <xs:enumeration value="MasterCard"/>
        <xs:enumeration value="Cash"/>
        <xs:enumeration value="AMEX"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

CommonTypes.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://NamespaceTest.com/CustomerTypes"
    xmlns:cmn="http://NamespaceTest.com/CommonTypes"
    elementFormDefault="qualified">
  <xs:import schemaLocation="CommonTypes.xsd" namespace="http://NamespaceTest.com/CommonTypes" />
  <xs:complexType name="CustomerType">
      <xs:sequence>
          <xs:element name="Name" type="xs:string" />
          <xs:element name="DeliveryAddress" type="cmn:AddressType" />
          <xs:element name="BillingAddress" type="cmn:AddressType" />
      </xs:sequence>
  </xs:complexType>
</xs:schema>

CustomerTypes.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://NamespaceTest.com/OrderTypes"
    xmlns:cmn="http://NamespaceTest.com/CommonTypes"
    elementFormDefault="qualified">
  <xs:import schemaLocation="CommonTypes.xsd" namespace="http://NamespaceTest.com/CommonTypes" />
  <xs:complexType name="OrderType">
      <xs:sequence>
          <xs:element maxOccurs="unbounded" name="Item">
              <xs:complexType>
                  <xs:sequence>
                      <xs:element name="ProductName" type="xs:string" />
                      <xs:element name="Quantity" type="xs:int" />
                      <xs:element name="UnitPrice" type="cmn:PriceType" />
                  </xs:sequence>
              </xs:complexType>
          </xs:element>
      </xs:sequence>
  </xs:complexType>
</xs:schema>

OrderTypes.xsd

Um dieses Beispiel fertig zu stellen, gehen Sie folgendermaßen vor:

 

1.Speichern Sie alle Schemas aus den obigen Codefragmenten auf der Festplatte und stellen Sie dabei sicher, dass die angegebenen Dateinamen beibehalten werden.

2.Generieren Sie den Schema Wrapper-Code anhand des obigen Schemas Main.xsd. Gehen Sie dabei vor, wie unter Generieren von Code anhand von XML-Schemas oder DTDs beschrieben. Sie sollten dadurch ein kompilierbares Programm in der Sprache Ihrer Wahl (C++, C# oder Java) erhalten.

3.Fügen Sie je nach Bedarf aus einem der folgenden Beispiel-Codefragmente Code zu Ihrem C++-, C#- oder Java-Programm hinzu.

 

XML Namespaces und Präfixe (C++)

XML Namespaces und Präfixe (C#)

XML Namespaces und Präfixe (Java)

© 2017-2023 Altova GmbH