Cet exemple illustre comment travailler avec le code de programme généré depuis un schéma XML "main" qui importe d’autres schémas. Chacun des schémas importés a un espace de noms cible différent. L’objectif est de créer par programme un document XML dans lequel tous les éléments sont préfixés conformément à leur espace de noms. Plus précisément, le document XML créé depuis votre code C++, C# ou Java doit ressembler à l'exemple ci-dessous :
<?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> |
Le schéma principal utilisé dans ces exemple est appelé Main.xsd. Comme indiqué dans l’extrait de code ci-dessous, il importe trois autres schémas : CommonTypes.xsd, CustomerTypes.xsd et OrderTypes.xsd. Pour obtenir les mêmes résultats que dans cet exemple, enregistrer tous les extraits de code ci-dessous dans des fichiers et utiliser les mêmes noms de fichier que ci-dessus. Veuillez noter que le schéma mappe chacun des préfixes ord, pur, cmn, et cust vers des espaces de noms (Order types, Purchase types, Common types, et Customer types, respectivement). Cela signifie que, dans le code généré, les classes correspondant à Orders, Purchases, Customers, etc, seront disponibles sous leur espace de noms respectif.
<?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
Pour terminer cet exemple, suivre les étapes suivantes :
1.Enregistrer tous les schémas depuis les extraits de code ci-dessus dans les fichiers sur le disque, en vous assurant que vous préservez les noms de fichier indiqués.
2.Générer le code de schema wrapper depuis le schéma Main.xsd ci-dessus, en utilisant les étapes décrites dans Générer du code depuis des Schémas XML ou des DTD. Une fois cette étape achevée , vous aurez généré un programme compilable dans le langage de votre choix (C++, C#, ou Java).
3.Ajouter du code dans votre programme C++, C# ou Java depuis un des extraits de code d’exemple, le cas échéant :
•Espaces de noms XML et Préfixes (C++)
•Espaces de noms XML et Préfixes (C#)
•Espaces de noms XML et Préfixes (Java)