Altova XMLSpy 2023 Enterprise Edition

此示例展示了如何使用从导入其他Schema的“主”XML Schema生成的程序代码。每个导入的Schema都有不同的目标命名空间。这里的目标是以编程方式创建一个XML文档,其中所有元素都根据其命名空间添加前缀。具体来说,从C++、C#或Java代码生成的XML文档应如下所示:

 

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

 

本例中使用的主Schema名为Main.xsd。正如下方代码片段所示,它导入了三个其他Schema:CommonTypes.xsdCustomerTypes.xsdOrderTypes.xsd。要获得与本例相同的结果,将以下所有代码片段保存到文件并使用与上面相同的文件名。请注意,Schema将前缀ordpurcmncust中的每一个都映射到某个命名空间(分别是Order类型、Purchase类型、Common类型和Customer类型)。这意味着,在生成的代码中,与Orders、Purchases、Customers等对应的类将在其各自的命名空间下可用。

 

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

要完成本示例,请执行以下操作:

 

1.将以上代码片段中的所有Schema都保存到磁盘上的文件,确保保留指定的文件名。

2.按照从XML Schema或DTD生成代码中描述的步骤从以上Main.xsd Schema生成Schema包装代码。在完成此步骤后,您应该已经使用您选择的语言(C++、C#或Java)生成了一个可编译的程序。

3.根据需要从以下示例代码片段之一将代码添加到您的C++、C#或Java程序。

 

XML命名空间和前缀(C++)

XML命名空间和前缀(C#)

XML命名空间和前缀(Java)

© 2017-2023 Altova GmbH