XML Schema et Marshalling

Marshalling en XML

Pour pouvoir utiliser le XML comme format d'échange entre les serveurs, il faut un mécanisme de transformation entre les types de données de langages d'applications (C, Java, Python, PHP, Perl, ....) et XML :


XML Schema

<racine
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://.../monSchema.xsd">
 ........... le document XML ..............
</racine>

Les constructions de Schema

MonSchema.xsd :

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://.../monSchema.xsd">
     .... déclarations ....
</xsd:schema>
<xsd:annotation>
  <xsd:documentation>
     .......... commentaire de documentation .............
  </xsd:documentation>
</xsd:annotation>
<xsd:element name="livre">
    ... description de l'élément  .....
</xsd:element>
<xsd:element  name="livre" type="TypeLivre"/>
<xsd:complexType name=TypeLivre">
   <xsd:sequence>
     <xsd:element name="titre"   type="xsd:string"/>
     <xsd:element name="auteur" type="xsd:string"/>
  </xsd:sequence>
  <xsd:attribute name="isbn" type="IsbnType"/>
<xsd:complexType/>
<xsd:complexType name=TypeLivre">
   <xsd:sequence>
     <xsd:element name="titre"   type="xsd:string"/>
     <xsd:element name="auteur" type="xsd:string" 
                  minOccurs="1" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:complexType>
<xsd:attributeGroup name="AttributsLivre">
   <xsd:attribute name="isbn" type="IsbnType"/>
   <xsd:attribute name="prix" type="xsd:float"/>
</xsd:attributeGroup>
<xsd:complexType name=TypeLivre">
   <xsd:sequence>
     <xsd:element name="titre"   type="xsd:string"/>
     <xsd:element name="auteur" type="xsd:string"/>
  </xsd:sequence>
  <xsd:attributeGroup ref="AttributsLivre"/>
</xsd:complexType>
<xsd:simpleType name="centPremierEntier">
  <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="0"/>
    <xsd:maxInclusive value="99"/>
  </xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TypeNumeroVoiture">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="\d{4} [A-Z]{2} \d{2}"/>
  </xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="TypeELivre">
   <xsd:complexContent>
     <xsd:extension base="TypeLivre"/>
       <xsd:sequence>
         <xsd:element name="url" type="xsd:anyURI"/>
      </xsd:sequence>
     </xsd:extension>
   </xsd:complexContent>
</xsd:complexType>
<xsd:complexType name=TypeLivre" final="extension">
                  ..........
<xsd:complexType/>
<xsd:complexType name="TypeDocument" abstract="true"/>

<xsd:complexType name="TypeLivre">
  <xsd:complexContent>
   <xsd:extension base="target:TypeDocument"/>
  </xsd:complexContent>
...
 <xsd:include schemaLocation="http://.../autre_schema.xsd"/>

JAXB

exercice