Altova MapForce 2023 Enterprise Edition

Este ejemplo explica cómo trabajar con código de programa generado a partir de un esquema XML "principal" que importa otros esquemas. Cada uno de los esquemas importados tiene un espacio de nombres de destino distinto. El objetivo es crear de forma programática un documento XML en el que todos los elementos estén prefijados de acuerdo a su espacio de nombres. Más concretamente, el documento XML creado a partir de su código C++, C# o Java debería tener un aspecto parecido a este:

 

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

 

El esquema principal que usamos en este ejemplo se llama Main.xsd. Como se ve en el extracto de código siguiente, el esquema importa otros tres esquemas: CommonTypes.xsd, CustomerTypes.xsd y OrderTypes.xsd. Para obtener los mismos resultados que en este ejemplo, guarde los extractos de código siguientes en archivos y guárdelos con los nombres de archivo que acabamos de mencionar. Tenga en cuenta que el esquema asigna cada uno de los prefijos ord, pur, cmn y cust a algún espacio de nombres (Order types, Purchase types, Common types y Customer types, respectivamente). Esto significa que, en el código generado, las clases que corresponden a Orders, Purchases, Customers, etc. están disponibles bajo el espacio de nombres correspondiente.

 

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

Para completar el ejemplo, siga estos pasos:

 

1.Guarde en disco todos los esquemas de los extractos de código anteriores sin cambiarles el nombre.

2.Genere el código contenedor de esquema a partir del esquema de más arriba Main.xsd siguiendo los pasos descritos en Generar código fuente a partir de esquemas XML o DTD. Si ha seguido todos los pasos hasta ahora, debería haber generado un programa compilable en el lenguaje de su elección (C++, C# o Java).

3.Añada código a su programa C++, C# o Java desde el extracto que corresponda en cada caso:

 

Espacios de nombres y prefijos XML (C++)

Espacios de nombres y prefijos XML (C#)

Espacios de nombres y prefijos XML (Java)

© 2017-2023 Altova GmbH