- Écrivez un exemple 3.1.xml validé par le schéma suivant
(télécharger: 3.1.xsd) :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ma.namespace/perso"
elementFormDefault="qualified">
<xsd:element name="doc">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="hello">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="world"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
N'oubliez pas de vérifier à l'aide de xmllint!
RENDU: 3.1.xml
-
On complique un peu le schéma (en rouge, les zones modifiées ou ajoutées)
(télécharger: 3.2.xsd).
Copiez 3.1.xml dans un nouveau fichier 3.2.xml et adaptez-le:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
targetNamespace="http://ma.namespace/perso"
elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="https://www.irif.fr/~stolze/xml/td3/xhtml1-strict.xsd"/>
<xsd:element name="doc">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="hello">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="world"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element ref="xhtml:p"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Note: On utilise une version "light" du schéma XHTML, normalement disponible
sur http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd, car la version réelle ralentit xmllint considérablement.
RENDU: 3.2.xml
- On complique encore le schéma
(télécharger: 3.3.xsd).
Copiez 3.2.xml dans un nouveau fichier 3.3.xml et adaptez-le:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
targetNamespace="http://ma.namespace/perso"
elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="https://www.irif.fr/~stolze/xml/td3/xml.xsd"/>
<xsd:import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="https://www.irif.fr/~stolze/xml/td3/xhtml1-strict.xsd"/>
<xsd:element name="doc">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="xhtml:html"/>
<xsd:element name="unsorted_html_elements">
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="3" maxOccurs="unbounded"
namespace="http://www.w3.org/1999/xhtml"/>
</xsd:sequence>
<xsd:attribute ref="xml:id" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
RENDU: 3.3.xml
- Pour finir, on va référencer les version officielles des schémas de la namespace
http://www.w3.org/XML/1998/namespace et de http://www.w3.org/1999/xhtml
(télécharger: 3.4.xsd).
Vous verrez que xmllint rame.
Copiez 3.3.xml dans un nouveau fichier 3.4.xml et adaptez-le:
Essayez d'étoffer un peu le HTML à l'intérieur de votre XML.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
targetNamespace="http://ma.namespace/perso"
elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
<xsd:import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>
<xsd:element name="doc">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="xhtml:html"/>
<xsd:element name="unsorted_html_elements">
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="3" maxOccurs="unbounded"
namespace="http://www.w3.org/1999/xhtml"/>
</xsd:sequence>
<xsd:attribute ref="xml:id" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
RENDU: 3.4.xml