此示例展示了如何使用从导入其他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.xsd、CustomerTypes.xsd和OrderTypes.xsd。要获得与本例相同的结果,将以下所有代码片段保存到文件并使用与上面相同的文件名。请注意,Schema将前缀ord、pur、cmn和cust中的每一个都映射到某个命名空间(分别是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)